深入的剖析C#中靜態變量和靜態構造函數:
在日常的程序開發過程經常會使用到靜態變量,眾所周知,靜態變量時常駐內存的變量,它的生命周期是從初始化開始一直到Application結束。但是,我們經常會忽略靜態變量的初始化時機。一下深入的介紹一下static變量是如何初始化的。
在一個類中定義了靜態的變量,這個類就肯定會存在靜態的構造函數,無論是我們自己定義了靜態的構造函數還是不定義靜態構造函數,如果不定義靜態的構造函數,編譯器會自動給我們生成默認的靜態構造函數。而類的靜態變量的初始化的 執行時機就是這個靜態構造函數執行的時機,因此找到了靜態構造函數的執行時機就等於找到了靜態變量初始化的時機。靜態變量的執行時機是在第一次new這個類的實例的時候或者第一次引用這個類內的任何一個靜態的成員的時候執行的, 而且靜態構造函數是.NET自己調用的,而且只會調用一次,以下一段代碼有助於童鞋們仔細研究靜態變臉的調用時機:

public class FirstClass { public static int _FirstVal=1; static FirstClass() { _FirstVal = SecondClass._SecondVal + 1; } } public class SecondClass { public static int _SecondVal; static SecondClass() { } static void Main() { Console.WriteLine("FirstVal={0}, SecondVal={1}", FirstClass._FirstVal, SecondClass._SecondVal); Console.ReadLine(); } }
以上這段代碼,在FirstClass的靜態構造函數執行之前_FirstVal為默認的值0,靜態構造函數執行完成之后_FirstVal為1,程序運行輸出的結果是:FirstVal=1,SecondVal=2。並且以上代碼FirstClass的靜態構造函數式在SecondClass的靜態構造函數之前執行。