C#中FlagsAttribute属性在enum中的应用

Net C#中枚举的声明格式如下所示:

[attributes] [modifiers] enum identifier [:base-type] {enumerator-list} [;]
FlagsAttribute属性就是枚举类型的一项可选属性。它的主要作用是可以将枚举作为位域处理(P.S. C#不支持位域)。所谓位域是单个存储单元内相邻二进制位的集合。通过为枚举添加这个属性,可以改变枚举的一些行为来满足我们的需要。

enum MyFlags { Flag1, Flag2, Flag3, Flag4};

MyFlags myFlag = MyFlags.Flag2 | MyFlags.Flag3;

Console.WriteLine(myFlag);//Flag4
 因为对于整数来说,| 操作就是将其转化为二进制再进行或运算。Flags.Flag2 | Flags.Flag3做的工作实际上是 0001 | 0010 = 0011 = 3再转换成(MyFlags)3就是Flag4了

如果枚举声明如下:

[FlagsAttribute]
enum MyFlags{
     Flag1 = 0,    //000
     Flag2 = 1,    //001
     Flag3 = 2,    //010
     Flag4 = 4     //100
};
则上述结果为Flag2,Flag3,这样做的意义在于我们可以实现“或”的关系。
就上例而言,myFlag可以更直观的表现为011,因此当我们想要检验它满足哪个枚举值时我们可以使用&操作:

if((myFlag & MyFlags.Flag2) == MyFlags.Flag2)
{
     Console.WriteLine("true");
}
if((myFlag & MyFlags.Flag3) == MyFlags.Flag3)

{
     Console.WriteLine("true");
}
011&001 = 001,011&010 = 010,因此这两个if都会成立,这就是这种枚举的意义吧。另外我们应当注意默认初始化的myFlag的值为0,与其作&运算不会有任何结果。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhulongxi/article/details/52371853
个人分类: C#
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

C#中FlagsAttribute属性在enum中的应用

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭