初始化惰性实例时,将参数传递给构造函数

时间:2010-12-11 00:07:51

标签: c# parameters constructor lazy-evaluation

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构造函数?

3 个答案:

答案 0 :(得分:28)

试试这个:

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

请记住表达式是懒惰地计算的,所以如果在调用构造函数之前更改变量InstanceName的值,它可能无法达到预期的效果。

答案 1 :(得分:7)

Lazy有两种初始化方法。第一种是使用T的默认ctor(无参数)

第二个是接受具有客户初始化逻辑的Func。你应该使用这里提到的第二个重载

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

答案 2 :(得分:3)

你不能,Lazy<T>需要一个无参数的构造函数。您可以使用Lazy<T>(Func<T>)构造函数,使用初始化类的方法。