Contents

Eric Lippert写了一系列的关于static constructor的文章,1234,可以读读对static constructor有更好的理解。

转一个其中的例子吧,假设有如下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
class B
{
static B() { Console.WriteLine("B cctor"); }
public B() { Console.WriteLine("B ctor"); }
public static void M() { Console.WriteLine("B.M"); }
}
class D : B
{
static D() { Console.WriteLine("D cctor"); }
public D() { Console.WriteLine("D ctor"); }
public static void N() { Console.WriteLine("D.N"); }
}
class P
{
static void Main()
{
System.Console.WriteLine("Main");
new D();
}
}

如果main函数是这样的,

1
2
3
4
static void Main() 
{
D.M();
}

哪个static constructor会被调到呢?

答案是只有B的会被调到。

如果main函数是这样的,

1
2
3
4
static void Main() 
{
D.N();
}

哪个static constructor会被调到呢?

答案是只有D的会被调到。

是不是有点意外:)

Contents