Il seguente codice:Perché l'inizializzazione dei campi statici si verifica prima del costruttore statico?
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");
}
}
stamperà:
0
_aaa
ctor
2
So del beforefieldinit
comportamento (con/senza costruttore statico, ecc).
La cosa che io Non capire è perché il ctor
(in uscita) è dopo_aaa
?
Non ha senso, cosa succede se voglio inizializzare le variabili nel costruttore?
Domanda
Perché l'inizializzazione di X
è prima del ctor
?
È simile per i campi non statici e per i costruttori non statici, ovviamente: 'class Foo {public string X =" A "; public Foo() {X = "B"; }} 'Con questo, se lo fai' (nuovo Foo()). X', ottieni '" B "', non '" A "', perché l'assegnazione di '" B "' è avvenuta per ultima (ha sovrascritto il primo valore). –
@JeppeStigNielsen Grazie per il chiarimento –