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 に答える