0

在 C# 中是否可以将类视为标志?如果我有类 Foo

class Foo
{
// Do things...
}

我有一些变量(int 或其他),我可以这样做:

Foo test = new Foo();
Foo res = test | SOME_ENUM_FLAG | OTHER_FLAG;

如果是这样,如何?

4

2 回答 2

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
于 2013-03-20T06:41:49.490 回答
0

老实说,这是一个坏主意。

它会降低可读性,引入“有趣”的边缘案例(我从没想过有人会结合这两个......)等等。

如果你想要一个枚举,请使用枚举。如果您想要有状态的行为,请使用类。

也就是说,如果我必须这样做,我会使用常规的旧枚举作为组合部分,并编写扩展方法来模仿方法和状态。

于 2013-03-20T07:05:01.213 回答