2013-01-07 20 views
1

這是一個懶惰初始化的字段的語法。更改ctor參數的惰性初始化字段?

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

但是如果我需要用運行時男星PARAMS創建new MyExpensive? (根據流程邏輯)

我不想創建一個標誌字段,然後在做IF's

我的意思是很多的,有時我需要運行new MyExpensive ("picture")有時new MyExpensive ("flowers")

如何我可以這樣做嗎?

(不包括每個類別創建一個懶惰的領域 - )

+0

過得好字符串值?如果這也是來自呼叫者,如果您在第二個呼叫中獲得不同的價值,您會期望什麼? –

+0

@JonSkeet將只有一個字符串值參數(在我的情況) –

+0

實際上並沒有回答任何我的問題,但... –

回答

2

如果你正在做什麼昂貴,你應該這樣做的方法,而不是一個屬性。

屬性應該是廉價因爲這是大多數程序員通常期望(最小驚訝的原則)。

在你的情況下,沒有一個getter - 使用:

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

和當然,你必須有參數的重載。

+0

Oded這裏的ctor參數在哪裏? –

+0

@RoyiNamir - 你可以有一個重載接受一個字符串參數,並將其傳遞給'ctor'。 – Oded

+0

請注意上面編輯的代碼。這是一個非常愚蠢的問題,因爲我本來可以這樣做,只是執行與'新MyExpensive(_cat)的構造函數' –