2016-03-09 121 views
1

我有一個我想實現的類,但是有很多條件邏輯,所以我決定實現一個構建器(like)模式。這些制定者將幾乎只標誌設置C#中的默認設置參數#

private class MockBuilder 
{ 
    private bool _flag1 = false; 
    private bool _flag2 = false; 
    // arbitrarily long amount of flags here 

    public MockBuilder() 
    { 
    } 
    public void DoFlag1(bool value = true) 
    { 
     _flag1 = value; 
    } 
    public void DoFlag2(bool value = true) 
    { 
     _flag2 = value; 
    } 
    public builtObject Build() 
    { 
    // Build with current flags 
    } 
} 

長話短說,我看着默認PARAMS的制定者和喜歡的一些問題:c#: getter/setter ,不知道是否有一個更「C#」的方式來做到這一點,沿

public bool flag1 { get; set(value = true); } 

的最終目標是能夠調用的建設者,像這樣

var object = new MockBuilder(); 
builder 
    .flag1() 
    .flag3() 
// etc... 
    .generate(); 

不C#實現一些東西線setter的默認值是什麼?這是一個很好的建設者模式的使用?我應該一起使用不同的模式嗎?

+0

看看這個問題:http://stackoverflow.com/questions/40730/how-do-you-give-ac-sharp-auto-property -a-default-value .. – txtechhelp

+0

默認情況下,我希望標誌最初設置爲false。然後,當通過調用「setter」觸發時,我希望它將其設置爲true,除非特別指出不是。如果這是有道理的。因此,如果可能的話,我希望setter有更多的C#方式的默認參數。如果不是,這是最好的方法嗎? –

+0

我不得不懷疑,如果這是其中的一個問題,那就是「如何解決x」,其中x可能不是解決問題的最佳方式。迪倫,你試圖解決的真正問題是什麼?多少個標誌(32/64 /更多)?有很多方法可以組合標誌/對象/屬性來描述狀態。更多信息將有助於爲問題提供解決方案,也許不會關注您可能提出的算法(這可能很有趣)。 –

回答

1

使用位掩碼像這樣:

public enum ThingsToDo 
{ 
    // use powers of 2! 
    DoThis   = 1 << 0, 
    DoThat   = 1 << 1, 
    WhileYouAreAtIt = 1 << 2, 
    AndFinally  = 1 << 3 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     var First = ThingsToDo.DoThat | ThingsToDo.DoThis; 
     var Next = ThingsToDo.WhileYouAreAtIt | ThingsToDo.AndFinally; 
     // ... 
     if ((First & ThingsToDo.DoThis) == ThingsToDo.DoThis) { 
      // do this 
     } 

     if ((Next & ThingsToDo.WhileYouAreAtIt) == ThingsToDo.WhileYouAreAtIt) 
     { 
      // do while you are at it 
     } 
    } 
} 
+0

也將+1您的答案,但沒有足夠的代表... –

+0

只是在這裏,以幫助...歡迎來到SO迪倫, –

+0

我已經實際上在SO/SE上已經超過2年了,一年前做了一個帳戶,大部分只是潛伏,這只是我問過的第二個問題。感謝您的幫助,雖然:) –