Недавно один из читателей задал вопрос по поводу разницы между двумя реализациями синглтонов: через обычное статическое поле или же через статическое поле, содержащее Lazy<T>:
public class FieldLikeSingleton
{
// Вариант C# 6
public static FieldLikeSingleton Instance { get; } = new FieldLikeSingleton();
private FieldLikeSingleton() {}
}
public class FieldLikeLazySingleton
{
private static readonly Lazy<FieldLikeLazySingleton> _instance =
new Lazy<FieldLikeLazySingleton>(() => new FieldLikeLazySingleton());
public static FieldLikeLazySingleton Instance => _instance.Value;
private FieldLikeLazySingleton() {}
}
Для простоты, первую реализацию я буду называть field-like реализацией (*), а вторую – ленивой.