星期五, 1月 29, 2010

c# 的 static ctor()

沒看 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。

沒有留言: