懒惰的初始化字段改变了ctor param?

时间:2013-01-07 18:23:52

标签: c# .net .net-4.0 lazy-initialization

这是延迟初始化的字段的语法。

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")

我该怎么做?

(不包括为每个类别创建一个惰性字段 - )

1 个答案:

答案 0 :(得分:2)

如果您正在做任何昂贵的,那么您应该在方法中而不是属性中进行。

属性应该快速便宜,因为这是大多数程序员的正常期望(最不惊讶的原则)。

在你的情况下,没有吸气剂 - 使用:

public MyExpensive GetExpensive()
{
    LazyInitializer.EnsureInitialized(ref _expensive, () = > new MyExpensive ());
    return _expensive;
}

当然,你已经参数化了重载。