C#特性(Attribute)之Flag特性
鱼肝油什么牌子好
本⽂参考⾃,纯属读书笔记,加深记忆
[Flags]的微软解释是“指⽰可以将枚举作为位域(即⼀组标志)处理。”其实就是在编写枚举类型时,上⾯附上Flags特性后,⽤该枚举变量是既可以象整数⼀样进⾏按位的“|”或者按位的“&”操作了。
另外⼀个是在引⽤COM组件时使⽤,我没有⽤过,你可以查看MSDN径须沽取对君酌
医保卡怎么查询这种⽤处很⼤,⽐如权限、执⾏状态等,都可以⽤⼀个int型保存到数据库中,C#中使⽤枚举可以处理这个问题。
.Net中的枚举⼀般有两种⽤法
(1)、表⽰唯⼀的元素序列,列⼊⼀周天⾥⾯的各天
(2)、表⽰多种的复合状态,这个时候⼀般需要为枚举加上[Flags]特性为标记
下⾯通过代码演⽰[Flags]特性的作⽤
1、不加[Flag]特性的代码
public enum Permission
{
create = 1,
read = 2,
update = 4,
delete = 8,
}四件套床上用品
策划案模板static void Main(string[] args)
{
Permission permission = ate | ad | Permission.update | Permission.delete;
Console.WriteLine("1、枚举创建,并赋值……");
Console.WriteLine(permission.ToString());
Console.WriteLine((int)permission);
}
输出:
2、加[Flag]特性的代码
[Flags]
public enum Permission
{
create = 1,
read = 2,
update = 4,
delete = 8,
}
怎样催奶最快static void Main(string[] args)
默歌曲{
Permission permission = ate | ad | Permission.update | Permission.delete;
Console.WriteLine("1、枚举创建,并赋值……");
Console.WriteLine(permission.ToString());
Console.WriteLine((int)permission);
}
输出:担心的反义词
3、分析上⾯的代码,发现加上[Flags]特性之后,对于枚举的追加操作,没加特性的只是单纯的从值上的相加,⽽加了特性的则是枚举上的相加。这也导致了create=1,read=2,update=4,delete=8的原因,因为两个状态的值相加不能等于其中任何⼀个的值,如果相等的话,那么[Flag]也就失去了使⽤它的意义(因为给⼀个⽤户赋予进⾏read和delete操作的权限,如果两个相加的值等于update,那不乱套了么,所以这⾥两个状态的值相加不能等于其中任何⼀个的值)。当然这⾥如果加⼀个可读可删的权限,那么就可以这样写了:readAndDelete=10。是不是很灵活
这种⽤处很⼤,⽐如权限、执⾏状态等,都可以⽤⼀个int型保存到数据库中,C#中使⽤枚举可以处理这个问题。