class MyClass
{
public static int Num;
public static void ShowNum() => Console.WriteLine(Num);
public void Msg() => Console.WriteLine("Msg");
static MyClass() { Num = 123; Console.WriteLine("Static ctor"); }
}
MyClass.ShowNum(); // 先觸發靜態建構函數 -> 123
MyClass.Num = 2009;
MyClass.ShowNum(); // 2009
new MyClass().Msg(); // Msg (靜態建構函式不再執行)
衍生類別建構函式**隱含**呼叫基底無參建構函式 (若基底有參數建構函式則**必須**顯式 `base(...)`):
class Parent { public Parent() => Console.WriteLine("Parent"); }
class Child1 : Parent { public Child1() => Console.WriteLine("Child1"); }
class Child2 : Child1 { public Child2() => Console.WriteLine("Child2"); }
new Parent(); // Parent
new Child1(); // Parent / Child1
new Child2(); // Parent / Child1 / Child2
// 帶參數版本
class Child1 : Parent
{
public Child1(int x) => Console.WriteLine(x);
}
class Child2 : Child1
{
public Child2(int x, int y) => Console.WriteLine(x + y);
}
new Child1(999); // Parent / 999
new Child2(111, 222); // Parent / Child1 / 333