Подтвердить что ты не робот

Передавать параметры конструктору при инициализации ленивого экземпляра

public class myClass
{
   public myClass(String InstanceName)
   {
      Name = InstanceName;
   }
   public String Name { get; set; }
}

// Now using myClass lazily I have:

Lazy<myClass> myLazy;
Console.WriteLine(myLazy.Value.Name);

Мой вопрос в том, как передать конструктор InstanceName в myClass, когда мы используем ленивый экземпляр?

4b9b3361

Ответ 1

Попробуйте следующее:

Lazy<myClass> myLazy = new Lazy<myClass>(() => new myClass(InstanceName));

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

Ответ 2

Lazy имеет два способа инициализации. Первый использует T default ctor (без параметров)

второй принимает Func, который имеет логику инициализации клиента. вы должны использовать вторую перегрузку, как указано здесь.

http://msdn.microsoft.com/en-us/library/dd642329.aspx

Ответ 3

Вы не можете, Lazy<T> требуется конструктор без параметров. Вы могли бы использовать конструктор Lazy<T>(Func<T>), хотя, с методом, который инициализирует класс.