2013-05-04 8 views
8

Ho una classe con un costruttore statico.Come assicurarsi che un costruttore statico venga chiamato senza chiamare alcun membro

Voglio che il costruttore statico venga chiamato senza chiamare o utilizzare nessuno dei suoi membri, ma solo se il costruttore non è stato già chiamato.

Ho provato a utilizzare la riflessione. Con la riflessione posso invocare il costruttore statico (molte volte), ma non riesco a scoprire se è già stato chiamato prima.

Come posso fare?

EDIT
Questa non è solo una classe di cui sto parlando, potrebbe essere di più. Diciamo, tutte le classi contrassegnate con un attributo speciale.

+1

impostare un flag. Dovresti solo eseguire un costruttore statico se stai impostando alcuni stati statici, quindi imposta quello stato, e vedi solo se è impostato se il costruttore viene eseguito di nuovo. –

+0

@Robert: ho bisogno che sia una soluzione generica. Non so in anticipo quante classi e quali classi. Flogging non aiuterà dal momento che .NET non imposterà quel flag quando chiama il costruttore. –

+0

Mi hai incuriosito ora. Perché ritieni sia necessario eseguire il costruttore * prima * ogni membro viene chiamato, se è quello che farà comunque? (il costruttore statico verrà richiamato appena prima dell'esecuzione del primo metodo o della chiamata di proprietà. Qualsiasi stato statico è irrilevante finché non viene toccato il primo metodo o proprietà). –

risposta

24

È possibile utilizzare il metodo RuntimeHelpers.RunClassConstructor (supponendo che ho capito correttamente quello che stavi cercando di fare ...)

RuntimeHelpers.RunClassConstructor(typeof(YourType).TypeHandle); 
+0

Esegue il costruttore solo una volta? –

+1

@RobertHarvey, sì, esegue il costruttore statico solo una volta, anche se lo chiami più volte. –

+1

Sì, ho appena controllato e questo sembra funzionare bene. –

Problemi correlati