參見《C# 高級程式設計》第四版
· 編寫靜態建構函數的一個原因是,類別有一些靜態欄位或屬性,需要在第一次使用類別之前,從外部來源初始化這些靜態欄位和屬性。
· 靜態建構子至多運行一次,即在程式碼引用類別之前執行。
· 靜態建構子沒有存取修飾符,其他C#程式碼從來不呼叫它,所以像public和private這樣的存取修飾符就沒有意義了。
· 靜態建構子不能帶任何參數,一個類別也只能有一個靜態建構子。
· 靜態建構子只能存取類別的靜態成員,不能存取實例成員。
下面給一個實例:
public class UserPreferences
{
public static readonly Color BackColor;
static UserPreferences()
{
//read BackColor from out source;
}
// ...
}
class MainEntryPoint
{
static void Main()
{
Console.WriteLine(UserPreferences.BackColor.ToString());
}
}
請注意,無參數的實例建構函數可以在類別中與靜態建構子安全共存。儘管參數列表時相同的,但這並不矛盾,因為靜態建構函式是在載入類別時執行,而實例建構函式是在建立實例是執行,所以建構函式的執行不會有衝突。
class MyTempClass
{
public static int num = 100;
static MyTempClass()
{
num = 101;
}
}
class Program
{
static void Main(string[] args)
{
int x = MyTempClass.num;
Console.WriteLine();
}
}
上面的這個程序,如果不加靜態建構函數的話,x的值為100.加了建構函數,x的值就為101.