Non credo che il codice generato controllerebbe se la classe è stata inizializzata ogni volta che accede a un membro statico (che include funzioni). Credo che controllare ogni accesso sarebbe inefficiente. Ho guardato §17.11 in ECMA 334 e si diceCome fa C# a sapere quando eseguire un costruttore statico?
L'esecuzione di un costruttore statico viene attivato dal primo dei seguenti eventi che si verificano all'interno di un dominio di applicazione:
- Un'istanza della la classe è stata creata.
- Viene fatto riferimento a qualsiasi membro statico della classe.
si presenta Come capire quando 'prima' che accade non è definito. Non riesco a pensare a un modo per farlo, ma per controllare ogni volta. Come potrebbe essere fatto?
Correlato, per il caso statico: http://csharpindepth.com/Articles/General/Beforefieldinit.aspx - non è banale –
Non è la questione di impostare un puntatore a funzione in un percorso diverso dopo il primo chiamata? All'inizio punta al caricatore di classe o altro, quindi al corpo della funzione ... – user1096188
@Marc: discute quando si chiama il costruttore statico PRIMA il primo accesso a un membro statico è consentito, non come viene rilevato il primo accesso . –