No creo que el código generado verifique si la clase se ha inicializado cada vez que accede a un miembro estático (que incluye funciones). Creo que verificar cada acceso sería ineficiente. Miré a §17.11 en ECMA 334 y dice¿Cómo sabe C# cuándo ejecutar un constructor estático?
La ejecución de un constructor estático es provocada por el primero de los siguientes eventos a ocurrir dentro de un dominio de aplicación:
- Una instancia de la clase es creada.
- Se hace referencia a cualquiera de los miembros estáticos de la clase.
Parece que la forma de averiguar cuándo 'primero' que ocurre no está definido. No puedo pensar en ninguna manera de hacerlo, sino de verificarlo todo el tiempo. ¿Cómo podría hacerse?
relacionados, para el caso estático: http://csharpindepth.com/Articles/General/Beforefieldinit.aspx - es no trivial –
no que es la cuestión de establecer un puntero de función en una ubicación diferente después de la primera ¿llamada? Al principio apunta al cargador de clases o lo que sea, luego al cuerpo de la función ... – user1096188
@Marc: que trata de llamar al constructor estático ANTES de que se permita el primer acceso a un miembro estático, no cómo se detecta el primer acceso . –