L'inizializzazione del campo statica deve essere completata prima che venga chiamato il costruttore?Come funziona l'inizializzazione del campo statico in C#?
Il seguente programma fornisce un output che mi sembra non corretto.
new A()
_A == null
static A()
new A()
_A == A
Il codice:
public class A
{
public static string _A = (new A()).I();
public A()
{
Console.WriteLine("new A()");
if (_A == null)
Console.WriteLine("_A == null");
else
Console.WriteLine("_A == " + _A);
}
static A()
{
Console.WriteLine("static A()");
}
public string I()
{
return "A";
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
}
}
Dang! Bastonatemi! –
Con tutto il rispetto ... il costruttore statico non viene eseguito per primo. L'inizializzatore del campo statico viene eseguito per primo. – Prankster
La costruzione di A._A avviene nel costruttore statico. È solo che il compilatore antepone tutte le inizializzazioni dei campi nel costruttore statico (.cctor) prima del codice dichiarato nel costruttore statico C#. –