Otra pregunta sobre lo que me inspiró para probar este código en C#:Crear una instancia de una clase en su constructor estático: ¿por qué está permitido?
class Program
{
static Program()
{
new Program().Run();
}
static void Main(string[] args) { }
void Run()
{
System.Console.WriteLine("Running");
}
}
Esto imprime "Running" cuando se ejecuta.
De hecho, esperaba que el compilador se quejara de esto. Después de todo, si la clase aún no ha sido inicializada por el constructor estático; ¿Cómo podemos estar seguros de que es válido llamar a los métodos?
Entonces, ¿por qué el compilador no nos impide hacer esto? ¿Hay algún escenario de uso importante para esto?
Editar
Conozco el patrón Singleton; El punto en cuestión es por qué puedo invocar un método en la instancia antes de que termine mi constructor estático. Hasta ahora, la respuesta de JaredPar tiene un buen razonamiento sobre esto.
Con un patrón singleton, en realidad es * mejor práctica * crear instancias de la clase adjunta en el constructor estático (o en el inicializador de campo estático, que equivale a lo mismo) –