C#中的默认setter参数

时间:2016-03-09 01:32:17

标签: c# design-patterns builder-pattern

我有一个我想要实现的类,但是有很多条件逻辑,所以我决定实现一个构建器(如)模式。这些setter几乎只是要设置的标志

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

长话短说,我查看了设置者的默认参数和一些问题:c#: getter/setter 并且想知道是否还有更多" C#"

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

最终目标是能够像这样调用构建器

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

C#是否为setter实现某种默认值?这是一个很好的使用建设者模式?我应该一起使用不同的模式吗?

1 个答案:

答案 0 :(得分: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
        }
    }
}