¿Se debe completar la inicialización del campo estático antes de llamar al constructor?¿Cómo funciona la inicialización del campo estático en C#?
El siguiente programa proporciona resultados que me parecen incorrectos.
new A()
_A == null
static A()
new A()
_A == A
El código:
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! ¡Pásame! –
Con todo respeto ... el constructor estático no se ejecuta primero. El inicializador de campo estático se ejecuta primero. – Prankster
La construcción de A._A ocurre en el constructor estático. Es solo que el compilador lista todas las inicializaciones de campos en el constructor estático (.cctor) antes de que el código se declare en el constructor estático de C#. –