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 變數宣告語法 datatype identifier eg int i 該語句宣告了int變數i。如果在表示式中直接使用此變數會報錯,除非對該變數進行初始化。2 宣告變數的方法 1 int i i 1 先宣告,在賦值 初始化 2 int x 0 宣告並初始化他的值。3 int x 0,y 0 在...
C 類開始的重新學習記錄3
1 分類 c 中的多型多指動態 1 靜態多型 函式過載 運算子過載,發生在編譯階段的多型。2 動態多型 派生類和虛函式實現的,發生在執行階段的多型。2 特點 組織清晰 可讀性強 利於前期和後期維護 3 多型使用 1 兩種多型實現方式 父類引用,執行子類物件 class base class son ...
2020 12 31 重新學習C 之 指標
從剛開始就沒有徹底理解鍊錶的原理,所以一直就是背的板子。直到今天學了指標,拿指標寫鍊錶,才覺得很透徹。指標的思路真的比陣列清晰很多。include include includeusing namespace std struct node struct list void add node lis...