Mam klasę statyczną ze statycznym konstruktorem, która zajmuje trochę czasu (10-15 sekund), aby wykonać i w pełni zainicjować klasę. Aby poprawić wydajność, postanowiłem włączyć jawnie inicjalizację tej klasy statycznej zamiast wtedy, gdy jest ona po raz pierwszy potrzebna, tak aby była gotowa do użycia, gdy faktycznie musi być użyta.Jak zainicjować klasę statyczną C#, zanim będzie faktycznie potrzebna?
Moja pierwsza myśl polegała na stworzeniu metody Initialize()
dla tej klasy, ale ponieważ mam już konstruktor statyczny, ta metoda nie wymaga niczego innego, jak tylko wywoływania metody jawnej inicjalizacji klasy bez dostęp do innych jego publicznych metod lub właściwości. Posiadanie metody, która nie robi nic bezpośrednio, nie wydaje mi się właściwe.
Potem pomyślałem, że mogę po prostu przenieść kod z konstruktora statycznego do tej metody Initialize()
, ale chciałbym również, aby klasa została zainicjowana, kiedy jest potrzebna, a metoda Initialize()
nie została jawnie wywołana.
Podsumowując, chcę następujące kryteria, których należy przestrzegać:
- Chcę umożliwić klasa statyczna być jawnie zainicjowana (prawdopodobnie za pomocą publiczną metodę
Initialize()
). - Nie chcę mieć dostępu do żadnych innych publicznych metod lub właściwości w klasie, gdy ich nie potrzebuję, nawet jeśli zainicjowałoby to klasę statyczną.
- Jeśli klasa nie została jawnie zainicjowana, nadal chcę ją zainicjować, kiedy jest ona potrzebna (tj. Podczas uzyskiwania dostępu do innych publicznych metod lub właściwości z zamiarem wykorzystania dostarczanej funkcji lub danych).
- To jest klasa pomocnicza, a użycie wzorca projektowego Singleton nie jest konieczne do moich celów.
Jaki byłby właściwy sposób przestrzegania powyższych kryteriów dla klasy statycznej napisanej w języku C#? Może to również dotyczyć innych języków programowania (np. Java), ale osobiście interesuje mnie rozwiązanie napisane w języku C#.
Dlaczego nie zainicjować klasę w statycznym konstruktorze? Uważam, że twoje pragnienie, aby ręcznie zainicjować niepotrzebne. – ChaosPandion
http://msdn.microsoft.com/en-us/library/bb397680.aspx – Venki
Czy "statyczna" klasa "inicjująca" nie * jest klasą statyczną? Jaki byłby cel takiego zachowania? Wygląda na to, że zamiast tego chcesz utworzyć instancję klasy na podstawie wartości statycznych. –