1.靜態類
永遠也不需要例項化的類,這種類唯一的作用就是將一組相關的成員組合到一起。static 關鍵字只能用於類,不能用於結構,因為clr 總是允許值型別例項化,沒辦法阻止(by 《clr via c#》)。靜態類有如下特點:
(1)不能實現任何介面(因為只有類的例項才可以呼叫類的介面方法);
(2)內部只能定義靜態的字段、方法、屬性和事件;
(3)靜態類是密封的,因此不可被繼承。(使用關鍵字static定義的類,編譯器將該類同時標記為abstract 和sealed)
2.靜態字段
靜態欄位被類的所以例項共享,所有例項都訪問同一記憶體位置。如果該記憶體位置的值被乙個例項改變了,則這種改變對所有的例項都可見。
注意:在建立某個型別的例項之前,就應該初始化該型別的所有靜態成員變數。
3.靜態方法
(1)靜態建構函式
靜態建構函式是乙個特殊的函式,將在其他所有方法執行之前以及變數或屬性被第一次訪問之前執行。這個建構函式是屬於類的,而不是屬於**例項的,就是說這個建構函式只會被執行一次。也就是在建立第乙個例項或引用任何靜態成員之前,由.net自動呼叫。可以使用該函式來初始化靜態變數,不應該使用例項建構函式初始化靜態變數。
請看下面例子:
例子1中輸出為:erp,b類中的建構函式並沒有執行。這是因為b類繼承了a類的靜態字段,靜態欄位只在呼叫之前執行一次;例子2中輸出為oa,因為呼叫的是b類的例項建構函式,在b類的例項建構函式之前會執行父類的靜態建構函式,在執行父類的靜態建構函式之前初始化父類的靜態字段。執行順序如上圖標註。
(2)其它靜態方法
c#靜態方法是一種特殊的成員方法 它不屬於類的某乙個具體的例項,而是屬於類本身。所以對靜態方法不需要首先建立乙個類的例項,而是採用類名.靜態方法的格式 。c#靜態方法呼叫時無法判斷非靜態變數使用的記憶體位址,所以靜態方法只能訪問類中的靜態成員,也只能呼叫類中的靜態方法。靜態方法效率上要比例項化高,靜態方法的缺點是不自動進行銷毀,而例項化的則可以做銷毀。靜態方法和靜態變數建立後始終使用同一塊記憶體,而使用例項的方式會建立多個記憶體。
C 學習筆記 靜態欄位和靜態方法
1 使用關鍵字 static 修飾的字段或方法成為靜態欄位和靜態方法,如 public static int num 1 2 靜態字段屬於類,並為類所用。而非靜態字段屬於物件,只能被特定的物件專有。3 c 嚴格規定非靜態字段只能通過物件來訪問,靜態字段只能通過類來訪問。4 在跟類的例項無關,只跟類有...
C 學習筆記 靜態欄位和靜態方法
1 使用關鍵字 static 修飾的字段或方法成為靜態欄位和靜態方法,如 public static int num 1 2 靜態字段屬於類,並為類所用。而非靜態字段屬於物件,只能被特定的物件專有。3 c 嚴格規定非靜態字段只能通過物件來訪問,靜態字段只能通過類來訪問。4 在跟類的例項無關,只跟類有...
類方法和靜態方法
通過靜態方法和類方法能夠把相關的函式封裝到乙個類裡面,有效的將 組織起來,提高 的可維護性 class date object def init self,year,month,day self.year year self.month month self.day day 普通方法 def ech...