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

Xaq*_*ron 23 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);
Run Code Online (Sandbox Code Playgroud)

我的问题是当我们使用惰性实例时如何传递InstanceNamemyClass构造函数?

Mar*_*ers 30

试试这个:

Lazy<myClass> myLazy = new Lazy<myClass>(() => new myClass(InstanceName));
Run Code Online (Sandbox Code Playgroud)

请记住,表达式是懒惰地计算的,因此如果InstanceName在调用构造函数之前更改变量的值,则可能无法执行预期的操作.

  • 使用相同的“InstanceName”我会从缓存中获取对象吗? (2认同)

小智 7

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

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

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