传递参数的构造函数,初始化一个懒惰的实例
问题描述:
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
构造函数时,我们使用的是懒惰的实例?传递参数的构造函数,初始化一个懒惰的实例
答
试试这个:
Lazy<myClass> myLazy = new Lazy<myClass>(() => new myClass(InstanceName));
记住表达式懒洋洋地评估,所以如果你改变变量InstanceName
的值调用构造函数它可能不是你所期望的面前。
答
您不能,Lazy<T>
需要一个无参数的构造函数。尽管如此,您可以使用构造函数Lazy<T>(Func<T>)
,并使用初始化类的方法。
答
懒惰有两种方法来初始化。第一种是使用T的默认ctor(无参数)
第二种是接受具有客户初始化逻辑的Func。您应该使用第二个重载这里提到
并用相同的'InstanceName'我会得到从缓存中的对象? – Xaqron 2010-12-11 00:14:32