靜態類
靜態類與非靜態類的重要區別在於靜態類不能實例化,也就是說,不能使用 new 關鍵字創建靜態類類型的變量。在聲明一個類時使用static關鍵字,具有兩個方面的意義:首先,它防止程序員寫代碼來實例化該靜態類;其次,它防止在類的內部聲明任何實例字段或方法。
靜態類是自C# 2.0才引入的,C# 1.0不支持靜態類聲明。程序員必須聲明一個私有構造器。私有構造器禁止開發者在類的范圍之外實例化類的實例。使用私有構造器的效果與使用靜態類的效果非常相似。兩者的區別在於,私有構造器方式仍然可以從類的內部對類進行實例化,而靜態類禁止從任何地方實例化類,其中包括從類自身內部。靜態類和使用私有構造器的另一個區別在於,在使用私有構造器的類中,是允許有實例成員的,而C# 2.0和更高版本的編譯器不允許靜態類有任何實例成員。使用靜態類的優點在於,編譯器能夠執行檢查以確保不致偶然地添加實例成員,編譯器將保證不會創建此類的實例。靜態類的另一個特征在於,C#編譯器會自動把它標記為sealed。這個關鍵字將類指定為不可擴展;換言之,不能從它派生出其他類。
靜態類的主要特性:
1:僅包含靜態成員。
2:無法實例化。
3:是密封的。
4:不能包含實例構造函數。
靜態成員
1:非靜態類可以包含靜態的方法、字段、屬性或事件;
2:無論對一個類創建多少個實例,它的靜態成員都只有一個副本;
3:靜態方法和屬性不能訪問其包含類型中的非靜態字段和事件,並且不能訪問任何對象的實例變量;
4:靜態方法只能被重載,而不能被重寫,因為靜態方法不屬於類的實例成員;
5:雖然字段不能聲明為 static const,但 const 字段的行為在本質上是靜態的。這樣的字段屬於類,
不屬於類的實例。因此,可以同對待靜態字段一樣使用 ClassName.MemberName 表示法來訪問 const 字段;6:C# 不支持靜態局部變量(在方法內部定義靜態變量)。
靜態構造函數
1:靜態類可以有靜態構造函數,靜態構造函數不可繼承;
2:靜態構造函數可以用於靜態類,也可用於非靜態類;
3:靜態構造函數無訪問修飾符、無參數,只有一個 static 標志;
4:靜態構造函數不可被直接調用,當創建類實例或引用任何靜態成員之前,靜態構造函數被自動執行,並且
只執行一次。
注意:
1:靜態類在內存中是一直有位置的;
2:非靜態類在實例化後是在內存中是獨立的,它的變量不會重復,在使用後會及時銷毀,所以不會出現未知
的錯誤。在C#中靜態成員是比較敏感的東西,在不是十分確認的情況下不要使用;
3:建議更多地使用一般類(非靜態類)。
使用選擇:
當定義的類不需要進行實例化時,我們使用靜態類;如果需要實例化對象,需要繼承等特性時,應該使用非靜態類,並且將統一使用的變量和方法設為靜態的,那麼所有實例對象都能訪問。
a1 = 0x01; //0000 0001
a2 = 0x00; //0000 0000
a3 = 0x03; //0000 0011
a4 = 0x02; //0000 0010
b1 = a1 ^ a2; //0000 0001
b2 = a1 ^ a3; //0000 0010
b3 = a1 ^ a4; //0000 0011
^異或運算符,位值相同為0,不同為1,見上示例.
//
簡單實際問題舉例:
======\=======\=======
======a=======b=======
上面是2條電路,2個開關分別為a和b,打開狀態:\[1],關閉狀態:/[0].
若同時打開或者關閉,兩條電路均不通.
若a打開[1],b關閉[0],電路1通電
======\=======/=======
若a關閉[0],b打開[1],電路2通電
======/=======\=======
綜上,電路在a,b狀態相同時不通[0],在a,b不同時通電[1].
a1 = 0x01; //0000 0001
a2 = 0x00; //0000 0000
a3 = 0x03; //0000 0011
a4 = 0x02; //0000 0010
b1 = a1 ^ a2; //0000 0001
b2 = a1 ^ a3; //0000 0010
b3 = a1 ^ a4; //0000 0011
^異或運算符,位值相同為0,不同為1,見上示例.
//
簡單實際問題舉例:
======\=======\=======
======a=======b=======
上面是2條電路,2個開關分別為a和b,打開狀態:\[1],關閉狀態:/[0].
若同時打開或者關閉,兩條電路均不通.
若a打開[1],b關閉[0],電路1通電
======\=======/=======
若a關閉[0],b打開[1],電路2通電
======/=======\=======
綜上,電路在a,b狀態相同時不通[0],在a,b不同時通電[1].