.NET學習之靜態類

1、靜態類
   1)僅包含靜態成員。
   2)不能被實例化。
   3)是密封的,不可被繼承

   4)不能包含實例構造函數

   5)調用前初始化(構造函數),只初始化一次

2、靜態成員
    1)如果創建了該類的任何實例,不能使用實例來訪問靜態成員。

    2)靜態方法和屬性只能訪問靜態字段和靜態事件。

    3)靜態成員通常用於表示不會隨對象狀態而變化的數據或計算。

    4)靜態方法可以被重載但不能被重寫,因爲它們屬於類,不屬於類的任何實例,靜態成員只被創建一次,所以靜態成員只有一份。類加載的時候,所有的靜態成員就會被創建在“靜態存儲區”裏面,一旦創建直到程序退出,纔會被回收。

    5)C# 不支持靜態局部變量(在方法範圍內聲明的變量)。

    6)靜態字段有兩個常見的用法:一是記錄已實例化對象的個數,二是存儲必須在所有實例之間共享的值。

    7)一個類只能有一個靜態構造函數,該構造函數不能有訪問修飾符,不能帶任何參數,不能被直接調用,只能在:
         (a) 創建包含靜態構造函數的類實例時
         (b) 訪問包含靜態構造函數的靜態成員時會先調用靜態構造函數,無論創建了多少個類實例,其靜態構造函數都只調用了一次。
    

class Program
 {
    public static int i =0;   
    public Program()  
    {
         i = 1;
         Console.Write("實例構造方法被調用");
     }  
    static Program() 
    {
         i = 2;
         Console.Write("靜態構造函數被執行");
    }
    static void Main(string[] args)
   {
        Console.Write(Program.i); //結果爲2,首先,類被加載,所有的靜態成員被創建在靜態存儲區,i=0,接着調用了類的成員,這時候靜態構造函數就會被調用,
        i=2;     
        Program p = new Program();   
        Console.Write(Program.i);//結果爲1,實力化後,調用了實例構造函數,i=1,因爲靜態構造函數只執行一次,所以不會再執行。
     }
 }
    8)this/base 關鍵字在靜態方法中不能使用,因爲有可能對象還不存在。

    9)靜態成員變量只被初始化一次,第二次保持着第一次改變後的值。



發佈了30 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章