2011-02-23 46 views
3

假設我有一個簡單的類,補充說:C#:執行條件有了對象初始化語法

public class Multiply 
{ 
    public int A {get; set;} 
    public int B {get; set;} 
    public int C {get; set;} 

    public List<int> Result {get; set;} 

    public void Calculate() 
    { 
     if (A != 0 && B!= 0 && C != 0) 
     { 
      Result.Add(A); 
      Result.Add(B); 
      Result.Add(C); 
      Result.Add(A * B); 
      Result.Add(A * C); 
      Result.Add(B * C); 
      Result.Add(A * B * C); 
     } 
    } 
} 

以上級車型我的實際應用。我有一系列的參數設置,在這種情況下,A,B和C.然後,我執行Calculate並使用Multiply對象的Result屬性來訪問結果。 (可能有更好的方法來完成這個模板;想到懶惰加載,如果你想建議一個更好的模板,但它不是我的問題的目的;它只是一個簡單的例子,說明我的問題)

這裏是我的問題:

如果我使用對象初始化器語法:

Multiply m = new Multiplier() 
{ 
    A = 1, 
    B = 2, 
    C = 3 
} 

m.Calculate(); 
DoSomething(m.Result[5]); //DoSomething(6); 

是否有執行Calculate()m初始化的一部分呢?

回答

5

使結果成爲只讀屬性並將計算邏輯移至該屬性。

但是不,你不能用初始化語法調用方法。那麼它不會是初始化語法,它只是一些替代的C#語法。

+0

我正要發表相同的答案。 – 2011-02-23 05:06:50

1

不受限制,只要我知道...

但是:你可能只是做計算的getter方法Result

編輯:

既然已經有人發帖說,你也可以只強制參數進入你的構造函數,而不是使用初始化塊。

這實際上更好,因爲你正在緩存結果。您的代碼的工作方式,您可以隨時更改A,B和C,但緩存的值不會更改。通過封裝這些屬性並僅將它們放入構造函數中,可以防止對象陷入不一致狀態,並且可以在構造函數中放入任何想要的代碼。

+0

你花了4分鐘發佈那個答案?至少在寫出重複答案之前進行檢查。這變得很快。 – mellamokb 2011-02-23 05:17:58