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,与其作
&
运算不会有任何结果。
查看全文
相关阅读:
javascript执行机制
PhpStorm常用的一些快捷键
php值传递和引用传递的区别是什么?
echo与print,var_dump()和print_r()的区别
PHP错误类型及屏蔽方法
工作中常用的正则表达式
Linux环境变量配置文件/etc/profile、/etc/bashrc、~/.bashrc的区别以及一些隐藏文件的作用
log4j配置不生效
Java执行CMD命令
jar的解压与打包
原文地址:https://www.cnblogs.com/RuiLei/p/664261.html
最新文章
Opencv 图像数字化 Mat
Opencv 图像数字化 ndarray
Opencv矩阵运算 C++ API
Opencv 矩阵运算python API
Opencv C++ 基本数据结构 Mat
Opencv Python API 基本数据结构
pig 的chararry类型不能用比较运算符comparison operator
pig函数以及关键字 的一些实例应用的总结(来自pig笔记)
pig对null的处理(实际,对空文本处理为两种取值null或‘’)
pig中查询top k,返回每个hour和ad_network_id下最大两个记录(SUBSTRING,order,COUNT_STAR,limit)
热门文章
pig的内置函数小总结(不全)
Dynamics CRM2013 更新用户数据主要电子邮件字段报数据加密错误
RTB--Real TimeBidding模式的互联网广告(实时竞价的广告投放)
Dynamics CRM2013 去除界面顶部黄色的CRM For Outlook条框
分类器评价指标
竞价拍卖理论的介绍(RTB模型中使用第二竞价模型,为的是纳什平衡,保护所有多方利益)
jquery怎么在点击li标签之后添加一个在class,点击下一个li时删除上一个class?
JQuery入口函数$(function(){})与JS的window.onload的区别
js随机点名器(简单)
JS绑定事件三种方式
Copyright © 2011-2022 走看看