C# 中的默认 setter 参数
Default setter param in C#
我有一个 class 我想实现,但是有很多条件逻辑,所以我决定实现一个构建器(类似)模式。这些设置器几乎只是要设置的标志
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 实现某种默认值?这是构建器模式的好用法吗?我应该一起使用不同的模式吗?
像这样使用位掩码:
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
}
}
}
我有一个 class 我想实现,但是有很多条件逻辑,所以我决定实现一个构建器(类似)模式。这些设置器几乎只是要设置的标志
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 实现某种默认值?这是构建器模式的好用法吗?我应该一起使用不同的模式吗?
像这样使用位掩码:
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
}
}
}