这是延迟初始化的字段的语法。
public class MyClass
{
string _cat;
public MyClass(string Category)
{
_cat=Category;
}
MyExpensive _expensive;
public MyExpensive Expensive
{
get
{
LazyInitializer.EnsureInitialized(ref _expensive, () = > new MyExpensive ());
return _expensive;
}
}
}
但是如果我需要使用运行时ctor params 创建new MyExpensive
该怎么办? (根据流程逻辑)
我不想创建一个标志字段,然后做了很多IF's
我的意思是,有时我需要运行new MyExpensive ("picture")
,有时需要运行new MyExpensive ("flowers")
我该怎么做?
(不包括为每个类别创建一个惰性字段 - )
答案 0 :(得分:2)
如果您正在做任何昂贵的,那么您应该在方法中而不是属性中进行。
属性应该快速和便宜,因为这是大多数程序员的正常期望(最不惊讶的原则)。
在你的情况下,没有吸气剂 - 使用:
public MyExpensive GetExpensive()
{
LazyInitializer.EnsureInitialized(ref _expensive, () = > new MyExpensive ());
return _expensive;
}
当然,你已经参数化了重载。