2013-05-04 10 views
8

Mam klasy z konstruktorem statycznym.Jak upewnić się, że statyczne konstruktory są wywoływane bez wywoływania żadnego członka

Chcę, aby statyczny konstruktor został wywołany bez wywoływania lub przy użyciu któregokolwiek z jego członków, ale tylko wtedy, gdy konstruktor nie został jeszcze wywołany.

Próbowałem użyć odbicia. Dzięki odbiciu mogę wywołać konstruktor statyczny (wiele razy), ale nie mogę się dowiedzieć, czy został już wcześniej wywołany.

Jak to zrobić?

EDIT
to nie tylko jedna klasa o której mówię, to mogło być więcej. Powiedzmy, wszystkie klasy oznaczone specjalnym atrybutem.

+1

Ustaw flagę. W przypadku ustawiania stanu statycznego wystarczy uruchomić konstruktor statyczny, więc ustaw ten stan i zobacz, czy jest on ustawiony, jeśli konstruktor jest uruchamiany ponownie. –

+0

@Robert: Potrzebuję rozwiązania ogólnego. Nie wiem z góry ile klas i jakie zajęcia. FLAGowanie to nie pomoże, ponieważ .NET nie ustawi flagi, gdy wywoła konstruktor. –

+0

Teraz mnie ciekawi. Dlaczego uważasz, że konieczne jest uruchomienie konstruktora * przed * jakimiikolwiek członkowie są wywoływani, jeśli tak to i tak będzie robić? (Konstruktor statyczny zostanie wywołany tuż przed wykonaniem pierwszej metody lub wywołania właściwości .Dowolny stan statyczny jest nieistotny do momentu dotknięcia pierwszej metody lub właściwości). –

Odpowiedz

24

Można użyć metody RuntimeHelpers.RunClassConstructor (zakładając, że poprawnie rozumieć to, co staraliśmy się zrobić ...)

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

Czy uruchamia się tylko raz konstruktor? –

+1

@RobertHarvey, tak, uruchamia konstruktor statyczny tylko raz, nawet jeśli wywołasz go wiele razy. –

+1

Tak, właśnie sprawdziłem i wygląda na to, że działa dobrze. –

Powiązane problemy