Singleton.Instance = Lazy.Value? - PullRequest
       17

Singleton.Instance = Lazy.Value?

0 голосов
/ 30 декабря 2010

Можно ли сказать, что создание класса Lazy похоже на создание Singleton?

В обоих случаях мы создаем экземпляр через свойство и получаем доступ к тому же экземпляру (если он создан) для дальнейшего использования.

Ответы [ 4 ]

2 голосов
/ 30 декабря 2010

Нет, они не одинаковы.

Ленивая инициализация переменной влияет только на эту переменную, она не делает класс одиночным или даже повторно использует экземпляры между переменными.Например, если у вас есть две переменные типа Lazy<MyClass>, они все равно будут создавать отдельные экземпляры класса.

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

1 голос
/ 30 декабря 2010

Ваш вопрос не ясен, вы хотите класс в шаблоне синглтона с отложенной инициализацией?

public sealed class Singleton
{
   private Singleton() { }
   static Lazy<Singleton> instance = new Lazy<Singleton>(() => new Singleton());

   public static Singleton Instance
      {
          get
          {
              return instance.Value;
          }
      }
}
0 голосов
/ 30 декабря 2010
// This is a lazy class - but you can have more than one
class Lazy
{
    private int? _value;
    public int Value {
        get
        {
           return _value ?? (_value = new Random().Next()).Value;
        }
    }
}

Вы, конечно, можете сделать Value статическим, чтобы все Lazy имели одинаковое значение

0 голосов
/ 30 декабря 2010

Нет, у вас может быть ленивый объект, но может быть несколько экземпляров одного и того же объекта.Синглтон будет существовать один раз и только один раз.

...