Может ли быть полезно ленивое создание экземпляров членов статического класса?

Итак, у меня есть класс с членами, которые я использую более или менее как константы. Я не могу назначить их константами, так как они сложнее простого примитива. Поэтому эти «квазиконстанты» многократно используются в разных местах моего приложения. По общему признанию, я, вероятно, перенесу их в файл конфигурации в будущем и буду загружать их динамически.

Однако на данный момент мне было любопытно - хотя они обслуживаются из статического класса, могу ли я вообще извлечь выгоду из их обертывания с ленивым созданием экземпляров? Причина, по которой я спрашиваю, заключается в том, что я не использую каждую «квазиконстанту», и есть некоторые накладные расходы, связанные с построением каждой из них (хотя и очень небольшие). Я не ожидаю какой-либо реальной выгоды от этого, так как это не узкое место или что-то в этом роде, но мне любопытно узнать о передовом опыте. Я недостаточно знаю о внутренностях статических классов, чтобы ответить на этот вопрос самостоятельно. Я знаю, что для доступа к статическим членам не требуется экземпляр класса, хотя в какой-то момент он должен создавать эти члены. Итак, мой вопрос сводится к следующему: когда создаются статические члены статического класса? Если они создаются до использования, могу ли я вообще извлечь выгоду из ленивого создания экземпляров? (создавать их только тогда, когда они запрашиваются?)


person RutledgePaulV    schedule 01.08.2013    source источник
comment
Некоторые используют шаблон Singleton для создания экземпляра свойства при необходимости.   -  person the_lotus    schedule 02.08.2013
comment
Правильная точка зрения, но я не понимаю, почему вы когда-либо выбирали это вместо статического класса. По общему признанию, в моем случае использование ленивого создания экземпляров не является необходимым, но я вижу, где это может быть оправдано, например, если член повторно необходим, если пользователь принимает определенное решение, но не нужен вообще, если пользователь этого не делает. принять указанное решение.   -  person RutledgePaulV    schedule 02.08.2013


Ответы (1)


когда создаются статические члены статического класса?

Статический конструктор и вся инициализация происходят до создания первого экземпляра этого класса или ссылки на любые статические члены.

Как правило, статический конструктор и все статические члены инициализируются непосредственно перед первым обращением к классу, хотя технически это может произойти в любой момент до первого использования.

Если они создаются до использования, могу ли я вообще извлечь выгоду из ленивого создания экземпляров? (создавать их только тогда, когда они запрашиваются?)

Вы можете извлечь из этого выгоду, особенно если значения требуют значительной инициализации или использования большого объема памяти и не всегда могут использоваться. Класс Lazy(Of T) делает это довольно простым в реализации.

person Reed Copsey    schedule 01.08.2013