C 特性(Attribute)之Flag特性

C 特性(Attribute)之Flag特性本文参考自 C 位域 flags Flags 的微软解释是 指示可以将枚举作为位域 即一组标志 处理 其实就是在编写枚举类型时 上面附上 Flags 特性后 用该枚举变量是既可以象整数一样进行按位的 或者按位的 amp 操作了 另外一个是在引用 COM 组件时使用 我没有用过 你可以查看 MSDN

大家好,我是讯享网,很高兴认识大家。


 

本文参考自C# 位域[flags]

这种用处很大,比如权限、执行状态等,都可以用一个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 = Permission.create | Permission.read | 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 = Permission.create | Permission.read | 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#中使用枚举可以处理这个问题。

转载:https://www.cnblogs.com/GreenLeaves/p/6752822.html

小讯
上一篇 2025-01-04 18:42
下一篇 2025-01-09 11:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/12170.html