FlagsAttribute属性在enum中的应用{转载}
2010-02-05 20:05
260 查看
本文摘自:/article/5969644.html
FlagsAttribute属性在enum中的应用
我看了Effective C#一书中的Item 8 : Ensure That 0 Is a Valid State for Value Types时提到了Flags属性在enum中的应用,于是就查了一下资料,写了一点关于这个的体会
.Net C#中枚举的声明格式如下所示: [attributes] [modifiers] enum identifier [:base-type] {enumerator-list} [;] FlagsAttribute属性就是枚举类型的一项可选属性。它的主要作用是可以将枚举作为位域处理(P.S. C#不支持位域)。所谓位域是单个存储单元内相邻二进制位的集合。通过为枚举添加这个属性,可以改变枚举的一些行为来满足我们的需要。 我们声明这样一个枚举,并执行如下语句:
MyFlags myFlag = MyFlags.Flag2 | MyFlags.Flag3;
Console.WriteLine(myFlag);
得到的结果是: Flag4 因为对于整数来说,|操作就是将其转化为二进制再进行或运算。Flags.Flag2 | Flags.Flag3做的工作实际上是 0001 | 0010 = 0011 = 3再转换成(MyFlags)3就是Flag4了 而如果将枚举声明为: [FlagsAttribute]
则上述程序的结果为: Flag2,Flag3 这样做的意义在于我们可以实现“或”的关系 就上例而言,myFlag可以更直观的表现为011,因此当我们想要检验它满足哪个枚举值时我们可以使用&操作 if((myFlag & MyFlags.Flag2) == MyFlags.Flag2)
if((myFlag & MyFlags.Flag3) == MyFlags.Flag3)
011&001 = 001,011&010 = 010,因此这两个if都会成立,这就是这种枚举的意义吧。另外我们应当注意默认初始化的myFlag的值为0,与其作&运算不会有任何结果。
FlagsAttribute属性在enum中的应用
我看了Effective C#一书中的Item 8 : Ensure That 0 Is a Valid State for Value Types时提到了Flags属性在enum中的应用,于是就查了一下资料,写了一点关于这个的体会
.Net C#中枚举的声明格式如下所示: [attributes] [modifiers] enum identifier [:base-type] {enumerator-list} [;] FlagsAttribute属性就是枚举类型的一项可选属性。它的主要作用是可以将枚举作为位域处理(P.S. C#不支持位域)。所谓位域是单个存储单元内相邻二进制位的集合。通过为枚举添加这个属性,可以改变枚举的一些行为来满足我们的需要。 我们声明这样一个枚举,并执行如下语句:
MyFlags myFlag = MyFlags.Flag2 | MyFlags.Flag3;
Console.WriteLine(myFlag);
得到的结果是: Flag4 因为对于整数来说,|操作就是将其转化为二进制再进行或运算。Flags.Flag2 | Flags.Flag3做的工作实际上是 0001 | 0010 = 0011 = 3再转换成(MyFlags)3就是Flag4了 而如果将枚举声明为: [FlagsAttribute]
则上述程序的结果为: Flag2,Flag3 这样做的意义在于我们可以实现“或”的关系 就上例而言,myFlag可以更直观的表现为011,因此当我们想要检验它满足哪个枚举值时我们可以使用&操作 if((myFlag & MyFlags.Flag2) == MyFlags.Flag2)
if((myFlag & MyFlags.Flag3) == MyFlags.Flag3)
011&001 = 001,011&010 = 010,因此这两个if都会成立,这就是这种枚举的意义吧。另外我们应当注意默认初始化的myFlag的值为0,与其作&运算不会有任何结果。
相关文章推荐
- FlagsAttribute属性在enum中的应用{转载}
- What does the [Flags] Enum Attribute mean in C#?
- FlagsAttribute属性在enum中的应用
- FlagsAttribute属性在enum中的应用
- 两个DIV之间的间距,clear属性灵活应用,方便控制一行div数量(转载,学习一下)
- C#:反射以及Attribute在ORM中的应用 [转载]
- [转]FlagsAttribute属性在enum中的应用
- COM组件设计与应用(十八)——属性包(转载)
- 【转载】COM 组件设计与应用(十八)——属性包
- 应用资源系列之属性[Attribute]资源
- 【转载】WAI-ARIA无障碍网页应用属性完全展示
- 转载:实现自己的ORM(反射以及Attribute在ORM中的应用)
- 【转载】CSS position属性和实例应用
- 转载:Delphi属性Property学习应用总结
- js nextSibling属性和previousSibling属性 javascript之getAttribute()方法 应用续
- Android应用资源系列之属性(Attribute)资源
- Attribute在.net编程中的应用(转载)
- Servlet--Session属性Attribute应用登录
- <转载>Java(41):在jsp中取出存放在Attribute中的对象及属性
- 两个DIV之间的间距,clear属性灵活应用(转载,学习一下)