.NET 4.0 имеет класс полезности System.Lazy, который выполняет инициализацию ленивого объекта. Я хотел бы использовать этот класс для проекта 3.5. Однажды я увидел реализацию где-то в ответе stackoverflow, но я больше не могу ее найти. Есть ли у кого-то альтернативная реализация Lazy? Ему не нужны все функции безопасности потоков версии 4.0.Реализация Lazy <T> для .NET 3.5
Обновлен:
ответы содержат ноны потокобезопасные и поточно версию.
Две проблемы, которые у меня возникают с этим: Прежде всего, предпочтительно блокировать частный объект, чем' lock (this) ', поскольку вы не можете контролировать, кто else может заблокировать ваш экземпляр «Lazy». Во-вторых, я не думаю, что создание 'isValueCreated' поля' volatile' служит для любой цели, когда вы уже используете критический раздел (не так ли? Исправьте меня, если я ошибаюсь). – Aaronaught
Я согласен, что volatile используется, когда блокировка не используется. Из MSDN: изменчивый модификатор обычно используется для поля, к которому обращаются несколько потоков, без использования оператора блокировки для сериализации доступа. Использование изменчивого модификатора гарантирует, что один поток извлекает самое современное значение, написанное другим потоком. –
Я изменил ответ. –