下面的代码:为什么静态字段初始化发生在静态构造函数之前?
static void Main(string[] args)
{
Console.WriteLine("0");
string h = Foo.X;
Console.WriteLine("2");
}
public static class Foo
{
public static string X = ((Func<string, string>)delegate(string g)
{
Console.WriteLine(g);
return (g);
})("_aaa");
static Foo()
{
Console.WriteLine("ctor");
}
}
会打印:
0
_aaa
ctor
2
我知道的beforefieldinit
行为(有/无静态构造函数等)。
我不明白的事情是为什么ctor
(输出)是_aaa
后?
它没有任何意义,如果我想在构造函数中初始化变量呢?
问题
为什么的X
初始化是ctor
过吗?
当然,非静态字段和非静态构造函数类似:class Foo {public string X =“A”; public Foo(){X =“B”; }}'如果你做了'(new Foo())。X',你得到''B'',而不是''A'',因为''B''的赋值最后发生了(覆盖了第一个值)。 –
@JeppeStigNielsen感谢您的澄清 –