Queridos todos, la pregunta como esta ha sido already asked, pero entre las respuestas no había explicación del problema que veo.¿Constructor estático llamado después del constructor de la instancia?
El problema: la C# Programming Guide dice:
Un constructor estático se utiliza para inicializar los datos estáticos, o para realizar una acción particular que debe realizarse una sola vez. Se llama automáticamente antes de que se cree la primera instancia o se hace referencia a cualquier miembro estático.
En particular, se llama al constructor estático antes de crear cualquier instancia de una clase. (Esto no asegura que el constructor estático termina antes de la creación de la instancia, pero esto es otra historia.)
Consideremos el código de ejemplo:
using System;
public class Test
{
static public Test test = new Test();
static Test()
{
Console.WriteLine("static Test()");
}
public Test()
{
Console.WriteLine("new Test()");
}
}
public class Program
{
public static void Main()
{
Console.WriteLine("Main() started");
Console.WriteLine("Test.test = " + Test.test);
Console.WriteLine("Main() finished");
}
}
Genera:
main() comenzó
nueva prueba()
prueba estática()
Test.test = Prueba
main() terminada
Así podemos ver que los acabados ejemplo constructor (y por lo tanto se crea una instancia) antes el constructor estático comienza. ¿Esto no contradice a la Guía? ¿Tal vez la inicialización de campos estáticos se considera una parte implícita del constructor estático?
¿Por qué no crear una instancia fuera de la clase en lugar de asignar una instancia a una propiedad estática, y luego verificar el orden? Esto parece una forma original de probarlo. – mway
¿No es porque estás instanciando un miembro 'estático' ...? – rsenna
@mway: puede funcionar de otra manera, pero me gustaría entender qué sucede exactamente en este caso. – Vlad