重新學習C#系列-02.靜態類、靜態字段和靜態方法


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#靜態方法調用時無法判斷非靜態變量使用的內存地址,所以靜態方法只能訪問類中的靜態成員,也只能調用類中的靜態方法。靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀。靜態方法和靜態變量創建后始終使用同一塊內存,而使用實例的方式會創建多個內存。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM