設置我的類作爲靜態的很多,但我不知道什麼時候使用靜態或沒有,或什麼是它使得使用它的差異或不。
請問有人能解釋一下嗎?
設置我的類作爲靜態的很多,但我不知道什麼時候使用靜態或沒有,或什麼是它使得使用它的差異或不。
請問有人能解釋一下嗎?
使一個類靜態只是防止人們嘗試創建它的一個實例。如果你所有的類都是靜態成員,那麼讓這個類本身是靜態的是一個好習慣。
如果我們將所有成員都設置爲靜態,那麼爲什麼將該類設置爲靜態是一種很好的做法?將類本身設爲靜態會有什麼好處? –
它會阻止人們嘗試實例化它 –
但是,爲了這個目的,你可以聲明一個私有的構造函數並使類Singleton成爲可能。據我所知,一個靜態類將始終保留在內存中創建一個開銷,但正常的單身類不會。 –
如果一個類被聲明爲靜態的,那麼變量和方法應強制聲明爲靜態的。
一個類可以被聲明爲靜態的,表明它只包含靜態成員。使用new關鍵字創建靜態類的實例是不可能的。當包含該類的程序或名稱空間被加載時,靜態類將由.NET Framework公共語言運行庫(CLR)自動加載。
使用靜態類來包含與特定對象無關的方法。例如,創建一組方法不會影響實例數據,並且不會與代碼中的特定對象關聯,這是一個常見要求。你可以使用靜態類來保存這些方法。
- >靜態類的主要特點是:
例
static class CollegeRegistration
{
//All static member variables
static int nCollegeId; //College Id will be same for all the students studying
static string sCollegeName; //Name will be same
static string sColegeAddress; //Address of the college will also same
//Member functions
public static int GetCollegeId()
{
nCollegeId = 100;
return (nCollegeID);
}
//similarly implementation of others also.
} //class end
public class student
{
int nRollNo;
string sName;
public GetRollNo()
{
nRollNo += 1;
return (nRollNo);
}
//similarly ....
public static void Main()
{
//Not required.
//CollegeRegistration objCollReg= new CollegeRegistration();
//<ClassName>.<MethodName>
int cid= CollegeRegistration.GetCollegeId();
string sname= CollegeRegistration.GetCollegeName();
} //Main end
}
強制強制強迫強制強制 –
靜態類可以是在某些情況下是有用的,但有濫用和/或過度使用它們,就像大多數語言特性的電位。
正如Dylan Smith已經提到的那樣,使用靜態類的最明顯的例子是如果你只有一個只有靜態方法的類。讓開發人員實例化這樣的類是沒有意義的。
需要注意的是,過多的靜態方法本身可能表明您的設計策略存在缺陷。我發現當你創建一個靜態函數時,你可以問自己一個問題 - 它是否更適合作爲a)實例方法,或者b)接口的擴展方法。這裏的想法是對象行爲通常與對象狀態相關聯,這意味着行爲應該屬於對象。通過使用靜態函數,您意味着行爲不應該屬於任何特定的對象。
過度使用靜態函數會阻礙多態和接口驅動設計 - 它們不能在派生類中被重寫,也不能被附加到接口。通常通過擴展方法將「輔助」函數綁定到接口上,這樣接口的所有實例都可以訪問共享的「輔助」功能。
在我看來,靜態函數絕對有用的一種情況是創建一個.Create()或.New()方法來實現對象創建的邏輯,例如當您要代理正在創建的對象時,
public class Foo
{
public static Foo New(string fooString)
{
ProxyGenerator generator = new ProxyGenerator();
return (Foo)generator.CreateClassProxy
(typeof(Foo), new object[] { fooString }, new Interceptor());
}
這可以用在要攔截/注入功能集成到一個對象的基礎上,也就是說,分配給其的方法的某些屬性的代理框架(如城堡動態代理)來使用。總的想法是,您需要一個特殊的構造函數,因爲從技術上講,您正在創建具有特殊添加功能的原始實例的副本。
靜態類/方法,例如有用的實現單例模式和工廠模式... – Yahia
@Yahia:與靜態類的單例模式? [我不這麼認爲](http://stackoverflow.com/questions/3565482/can-singleton-class-be-static/3565496#3565496) – BoltClock
@BoltClock如果你仔細閱讀,然後我寫了「靜態類/方法「,我非常確定靜態方法在實現Singleton模式時是有用的...... – Yahia