El siguiente código:¿Por qué la inicialización de los campos estáticos ocurre antes del constructor estático?
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");
}
}
imprimirá:
0
_aaa
ctor
2
que sé sobre el comportamiento beforefieldinit
(con/sin constructor estática, etc.).
Lo que he No entender es por qué el ctor
(en la salida) es después_aaa
?
No tiene ningún sentido, ¿y si quiero inicializar variables en el constructor?
Pregunta
¿Por qué la inicialización de X
es antes de la ctor
?
Es similar para campos no estáticos y constructores no estáticos, por supuesto: 'clase Foo {public string X =" A "; public Foo() {X = "B"; }} 'Con esto, si haces' (new Foo()). X', obtienes '" B "', no '" A "', porque la asignación de '" B "' pasó la última vez (sobreescribió la primera valor). –
@JeppeStigNielsen Gracias por aclarar –