2010-12-11 3 views
17
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); 

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

ответ

25

Попробуйте это:

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

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

+0

И с тем же 'InstanceName' Я хотел бы получить объект из кэша? – Xaqron

1

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

8

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

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

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

Смежные вопросы