這段時間開始看看設計模式,剛剛看了下Singleton模式,實現其最簡潔的方法是: class Singleton
{
public static readonly Singleton instance = new Singleton();
private Singleton()
{ }
}
很多人對這段代碼不大理解,其實等價與:class Singleton
{
public static readonly Singleton instance;
static Singleton()
{
instance = new Singleton();
}
private Singleton()
{ }
}
現在都明白了吧,現在我們來探討下靜態建構函式,看看他是怎麼來實現的.
靜態建構函式,用於初始化任何待用資料,或用於執行僅需執行一次的特定操作。在建立第一個執行個體或引用任何靜態成員之前,將自動調用靜態建構函式。,其方式與用於初始化執行個體資料的執行個體建構函式一樣。靜態建構函式與執行個體建構函式在使用規則上面有一些區別。與執行個體建構函式不一樣,靜態建構函式不能重載,所以可用的靜態建構函式只有一個預設的無參靜態建構函式。靜態建構函式也不能顯式的調用,不能在衍生類別中繼承,但是在建立基類類型時可以調用。
C#在使用靜態建構函式時的幾個原則:
1.靜態建構函式在建立類的執行個體之前調用,因此在所有執行個體建構函式之前調用。
2.靜態建構函式在建立類的第一個執行個體之前調用。
3.靜態建構函式在引用靜態欄位之前調用。
下面是簡單例子: class Test
{
static Test()
{
Console.WriteLine("a");
}
public Test()
{
Console.WriteLine("b");
}
}
class TestOther : Test
{
public TestOther()
{
Console.WriteLine("c");
}
}
則: Test t1 = new Test();
Test t2 = new Test();
TestOther t3 = new TestOther();
輸出為:a,b,b,b,c
靜態建構函式只調用了一次,但這種方式實現Singleton模式有個缺陷,建構函式不能帶參數,不過並沒有很大影響.