zoukankan
html css js c++ java
FlagsAttribute属性在enum中的应用
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#不支持位域)。所谓位域是单个存储单元内相邻二进制位的集合。通过为枚举添加这个属性,可以改变枚举的一些行为来满足我们的需要。
我们声明这样一个枚举,并执行如下语句:
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,与其作
&
运算不会有任何结果。
查看全文
相关阅读:
AS400小结(2)
java循环链表
RPG程序中一些小结
学习AS400心得体会
Vue学习二
Vue学习一
VC视图的多页打印(转)
MFC对象拖拽功能(不只是文件拖拽)(转)
Silverlight如何显示、输入上标和下标?
【2011】Google Maps API3
原文地址:https://www.cnblogs.com/RuiLei/p/664261.html
最新文章
Windows 服务启动失败必须首先安装 Windows 服务解决办法
解决GridView中嵌入CheckBox事件无法响应的问题
Ckeditor插件的重置清空
IE6下A标签href和onclick同时存在时的问题
系统超时后跳转到登录窗体的一些设置
uboot webfailsafe
uboot make的处理过程
Package XXX is missing dependencies for the following libraries
rtc I2C设备驱动
locale 语法的使用
热门文章
openwrt 实现对shell脚本的守护处理
如何程序只链接用到的接口
openwrt shell json api操作说明
动态库没有链接静态库的处理方法
linux C 语言判断自身程序是否在运行
接触到的
不用既存函数,计算任意两个日期的天数
异常处理
Error
初学AS400总结1
Copyright © 2011-2022 走看看