沒看 c# in depth,還真不知道可以在 ctor 前加上 static 的修飾詞。以下是實驗結果:
using System; namespace Sample { class Class1 { static Class1() { // Name="static"; // 不行,static function 只能存取 static member StaticName = "StaticName"; Console.WriteLine( "Class1 static ctor()" ); } public Class1() { Console.WriteLine( "Class1 ctor()" ); } public Class1( string name ) { Console.WriteLine( "Class1 ctor( string )" ); Name = name; } public string Name { private set; get; } public static string StaticName; } class MainClass { public static void Main(string[] args) { Class1 obj1 = new Class1("obj1"); Class1 obj2 = new Class1(); Class1 obj3 = new Class1("obj3"); Console.WriteLine("Hello World! {0}", Class1.StaticName ); } } }
執行結果如下:
Class1 static ctor() Class1 ctor( string ) Class1 ctor() Class1 ctor( string ) Hello World! StaticName
可以很清楚看到,無論如何,static ctor() 都會先被執行到,而且只會被執行一次。這很適合用來初始 static member。