【发布时间】:2012-01-07 06:46:05
【问题描述】:
以下代码:
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 感谢您的澄清