将一个阶级视为一面旗帜

时间:2013-03-20 06:40:04

标签: c# flags

C#可以将一个类视为一个标志吗? 如果我有Foo课

class Foo
{
// Do things...
}

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

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

若然,怎么样?

2 个答案:

答案 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)

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

这会降低可读性,引入“有趣”的边缘情况(我从未想过有人会将这两种情况结合起来......)等等。

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

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