C#可以将一个类视为一个标志吗? 如果我有Foo课
class Foo
{
// Do things...
}
我有一些变量(int或其他),我可以做这样的事情:
Foo test = new Foo();
Foo res = test | SOME_ENUM_FLAG | OTHER_FLAG;
若然,怎么样?
答案 0 :(得分:4)
好吧,我建议您尝试重载|
运算符
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
答案 1 :(得分:0)
老实说,这是一个坏主意。
这会降低可读性,引入“有趣”的边缘情况(我从未想过有人会将这两种情况结合起来......)等等。
如果你想要一个枚举,请使用枚举。如果您想要有状态行为,请使用类。
那就是说,如果我有这样做,我会使用常规的旧枚举作为组合部分,并编写扩展方法来模仿方法和状态。