У меня есть статический класс со статическим конструктором, который занимает некоторое время (10-15 секунд) для выполнения и полной инициализации класса. Чтобы улучшить производительность, я решил разрешить явную инициализацию этого статического класса вместо того, когда он в первый раз необходим, чтобы он был готов к работе, когда его действительно нужно использовать.
Моей первой мыслью было создание метода Initialize()
для класса, но, поскольку у меня уже есть статический конструктор, этот метод, похоже, не должен делать ничего, кроме вызова метода для явной инициализации класса без доступа к каким-либо другим открытым методам или свойствам. Мне кажется, что метод, который ничего не делает напрямую, мне не подходит.
Тогда я подумал, что могу просто переместить код из статического конструктора в этот метод Initialize()
, но я также хотел бы, чтобы класс инициализировался, когда он был нужен в первый раз, а метод Initialize()
явно не вызывался .
Подводя итог, я хочу, чтобы были соблюдены следующие критерии:
- Я хочу разрешить явную инициализацию статического класса (вероятно, с использованием общедоступного метода
Initialize()
).
- Я не хочу получать доступ к каким-либо другим открытым методам или свойствам класса, когда они мне не нужны, даже если это инициализирует статический класс.
- Если класс не был явно инициализирован, я все еще хочу инициализировать его, когда он в первый раз необходим (т. Е. При доступе к другим открытым методам или свойствам с намерением использовать предоставляемые ими функциональные возможности или данные).
- Это вспомогательный класс, и использование шаблона проектирования Singleton для моих целей не требуется.
Как правильно соблюдать вышеприведенные критерии для статического класса, написанного на C #? Это также может относиться к другим языкам программирования (например, Java), но я лично заинтересован в решении, написанном на C #.