Poniższy kod:Dlaczego inicjalizacja pól statycznych występuje przed konstruktorem statycznym?
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");
}
}
wypisze:
0
_aaa
ctor
2
wiem o zachowanie beforefieldinit
(z/bez konstruktora statycznego itp.)
Rzecz która ja nie zrozumieć, dlaczego ctor
(na wyjściu) jest po_aaa
?
Nie ma sensu, co jeśli chcę zainicjować zmienne w konstruktorze?
Pytanie
Dlaczego inicjalizacji X
jest przed ctor
?
Podobnie jest w przypadku pól niestatycznych i konstruktów niestatycznych, oczywiście: 'class Foo {public string X =" A "; public Foo() {X = "B"; }} 'Z tym, jeśli zrobisz' (new Foo()). X', otrzymasz '" B "', a nie '" A "', ponieważ przypisanie '" B "' stało się ostatnim (nadpisanie pierwszego wartość). –
@JeppeStigNielsen Dzięki za wyjaśnienia –