Ответ 1
Лучший источник на С# Singletons (также охватывает Lazy<>
) принадлежит Jon Skeet: http://csharpindepth.com/Articles/General/Singleton.aspx
Предположим, вы хотите иметь класс, который:
- представляет собой уникальный ресурс, поэтому он должен иметь уникальный экземпляр,
- экземпляру требуется дорогостоящая инициализация,
- параметры инициализации будут доступны только во время выполнения,
- Есть случаи, когда вы не будете использовать объект в конце,
- существует несколько потоков, которые могут одновременно инициализировать одноэлементный объект,
- и др.
Если большинство из приведенных выше условий являются истинными, вам необходимо убедиться, что класс Singleton, и уникальный экземпляр лениво инициализирован (не инициализирован до тех пор, пока не будет необходимо). Если вы нацеливаете С# 4.0 или новее, использование Lazy<>
делает ваш дизайн проще, читабельнее и легче запомнить.