1. 程式人生 > >C# 靜態類(static class)

C# 靜態類(static class)

類可以宣告為 static 的,以指示它僅包含靜態成員

靜態類在載入包含該類的程式或名稱空間時,由 .NET Framework 公共語言執行庫 (CLR;特指:C#語言) 自動載入。

使用靜態類來包含不與特定物件關聯的方法,具有通用性

注意事項:

(1) 不能使用 new 關鍵字建立靜態類的例項;

(2) 僅包含靜態成員;

(3) 不能被例項化;

(4) 密封的,不能被繼承;

(5) 不能包含例項建構函式,但可以包含靜態建構函式;

關於靜態建構函式的補充:

(1) 靜態建構函式不可繼承

(2) 靜態建構函式可以用於靜態類,也可用於非靜態類

(3) 靜態建構函式無訪問修飾符、無引數

,只有一個 static 標誌;

(4) 靜態建構函式不可被直接呼叫,當建立類例項或引用任何靜態成員之前,靜態建構函式被自動執行,並且只執行一次。

例項分析:

剛開始對靜態類不太熟悉,所以寫出瞭如下的程式碼:

  1. publicclass ClassA  
  2. {  
  3.     publicstaticstring AppName = "hello, this is a static class test";  
  4.     publicstaticint num = 5;  
  5.     public ClassA()  
  6.     {  
  7.         num = 15;  
  8.     }  
  9.     public
    staticint getNum()  
  10.     {  
  11.         return num;  
  12.     }  
  13. }  
在主函式中呼叫ClassA的靜態方法:
  1. staticvoid Main(string[] args)  
  2. {  
  3.     int num=ClassA.getNum();  
  4.     Console.WriteLine(num);  
  5.     Console.ReadLine();  
  6. }  
最終的輸出結果為:5

原因分析:

雖然有例項建構函式,但對classA類沒有進行例項化,所以該例項建構函式沒有被呼叫;

主函式程式碼修改如下:

  1. static
    void Main(string[] args)  
  2. {  
  3.     ClassA a = new ClassA();  
  4.     int num=ClassA.getNum();  
  5.     Console.WriteLine(num);  
  6.     Console.ReadLine();  
  7. }  
輸出結果為:15

如果類不宣告為靜態類(static class),很容易出現類似於上面的錯誤。修改為靜態類,程式碼如下:

  1. publicstaticclass ClassA  
  2. {  
  3.     publicstaticstring AppName = "hello, this is a static class test";  
  4.     publicstaticint num = 5;  
  5.     static ClassA()  
  6.     {  
  7.         num = 15;  
  8.     }  
  9.     publicstaticint getNum()  
  10.     {  
  11.         return num;  
  12.     }  
  13. }  

主函式程式碼如下:

  1. staticvoid Main(string[] args)  
  2. {  
  3.     int num=ClassA.getNum();  
  4.     Console.WriteLine(num);  
  5.     Console.ReadLine();  
  6. }  
由於靜態建構函式會在呼叫靜態類的方法時自動呼叫,所以最終輸出結果正確!