1

这是延迟初始化的 Field 的语法。

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;
        }
    }
}

但是如果我需要new MyExpensive 使用运行时 ctor params创建呢?(根据流程逻辑)

我不想创建一个标志字段,然后做很多IF's

我的意思是,有时我需要跑步new MyExpensive ("picture"),有时new MyExpensive ("flowers")

我怎样才能做到这一点 ?

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

4

1 回答 1

2

如果你正在做任何昂贵的事情,你应该用方法而不是属性来做。

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

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

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

当然,你有参数化的重载。

于 2013-01-07T18:26:30.430 回答