2013-05-04 7 views
8

Ich habe eine Klasse mit einem statischen Konstruktor.So stellen Sie sicher, dass ein statischer Konstruktor ohne Aufruf eines Mitglieds aufgerufen wird

Ich möchte den statischen Konstruktor ohne Aufruf oder Verwendung eines seiner Mitglieder aufgerufen werden, aber nur wenn der Konstruktor nicht bereits aufgerufen wurde.

Ich versuchte mit Reflexion. Mit Reflection kann ich den statischen Konstruktor (oft) aufrufen, aber ich kann nicht herausfinden, ob es schon vorher aufgerufen wurde.

Wie mache ich das?

EDIT
Dies ist nicht nur eine Klasse ich sprechen werde, könnte es mehr sein. Nehmen wir an, alle Klassen sind mit einem speziellen Attribut gekennzeichnet.

+1

ein Flag gesetzt. Sie müssten nur einen statischen Konstruktor ausführen, wenn Sie einen statischen Status festlegen, also setzen Sie diesen Status und sehen Sie, ob er gesetzt ist, wenn der Konstruktor erneut ausgeführt wird. –

+0

@Robert: Ich brauche es eine generische Lösung. Ich weiß nicht im Voraus, wie viele Klassen und welche Klassen. Das Flaggen wird nicht helfen, da .NET dieses Flag nicht setzt, wenn er den Konstruktor aufruft. –

+0

Du hast mich jetzt neugierig gemacht. Warum halten Sie es für notwendig, den Konstruktor auszuführen * bevor * irgendwelche Mitglieder aufgerufen werden, wenn das sowieso so ist? (Der statische Konstruktor wird kurz vor dem Ausführen der ersten Methode oder des ersten Aufrufs der Eigenschaft aufgerufen. Jeder statische Zustand ist irrelevant, bis die erste Methode oder Eigenschaft berührt wird). –

Antwort

24

können Sie die RuntimeHelpers.RunClassConstructor Methode verwenden (unter der Annahme, dass ich das richtig verstanden, was du ... vorhatten)

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

Wird der Konstruktor nur einmal ausgeführt? –

+1

@RobertHarvey, ja, es führt den statischen Konstruktor nur einmal, auch wenn Sie es mehrmals aufrufen. –

+1

Yup, ich habe gerade überprüft und das scheint gut zu funktionieren. –