本篇體驗靜態變量、靜態構造函數和靜態類。
靜態變量
靜態變量位于棧上,它是一個全局變量,在編譯期就已經生成。
public class Cow{public static int count;PRivate int id;public Cow(){id = ++count;}}
客戶端創建2個Cow的實例,并打印靜態變量count。
static void Main(string[] args){Console.WriteLine(Cow.count);Cow cow1 = new Cow();Cow cow2 = new Cow();Console.WriteLine(Cow.count);}
結果:02
○ 在創建Cow實例之前,全局就已經有了count這個靜態變量○ 如果在static之前用private修飾,就不可以通過"類名.靜態字段名"來訪問靜態字段,但全局的靜態字段始終存在
在堆和棧上的表現,如下圖:

靜態構造函數
在Cow類中添加一個靜態構造函數。
public class Cow{public static int count;private int id;public Cow(){id = ++count;}static Cow(){count = new Random().Next(100);}}
在構造函數和靜態構造函數中,都對Cow的靜態字段賦值。現在我們想了解靜態構造函數在什么時候觸發。是在用構造函數創建實例的時候觸發嗎?會不會在設置Cow的字段或屬性值的時候觸發?在客戶端,通過打印靜態字段count的值來了解靜態構造函數什么時候被觸發。
static void Main(string[] args)
新聞熱點
疑難解答