在 C# 中是否可以将类视为标志?如果我有类 Foo
class Foo
{
// Do things...
}
我有一些变量(int 或其他),我可以这样做:
Foo test = new Foo();
Foo res = test | SOME_ENUM_FLAG | OTHER_FLAG;
如果是这样,如何?
好吧,我建议你尝试重载|
运算符
class Foo
{
public static Foo operator |(Foo left, Foo right)
{
return new Foo(...);
}
// some more examples
public static Foo operator |(Foo left, SomeEnum right)
{
return new Foo(...);
}
public static Foo operator |(Foo left, int right)
{
return new Foo(...);
}
}
这可以是
Foo test = new Foo();
Foo res = test | SomeEnum.EnumValue | someInt;
甚至
res |= SomeEnum.EnumValue
老实说,这是一个坏主意。
它会降低可读性,引入“有趣”的边缘案例(我从没想过有人会结合这两个......)等等。
如果你想要一个枚举,请使用枚举。如果您想要有状态的行为,请使用类。
也就是说,如果我必须这样做,我会使用常规的旧枚举作为组合部分,并编写扩展方法来模仿方法和状态。