C# 特性(Attribute)之Flag特性

C# 特性(Attribute)之Flag特性

大家好,又见面了,我是全栈君。

本文参考自C# 位域[flags],纯属读书笔记,加深记忆

[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 = Permission.create | Permission.read | Permission.update | Permission.delete;
            Console.WriteLine("1、枚举创建,并赋值……");
            Console.WriteLine(permission.ToString());
            Console.WriteLine((int)permission);
        }

输出:C# 特性(Attribute)之Flag特性

 

 

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);
        }

输出:C# 特性(Attribute)之Flag特性

 

 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

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108554.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 学会阅读Java字节码

    学会阅读Java字节码1 Class 文件基础 1 文件格式 Class 文件的结构不像 XML 等描述语言那样松散自由 由于它没有任何分隔符号 所以 以上数据项无论是顺序还是数量都是被严格限定的 哪个字节代表什么含义 长度是多少 先后顺序如何 都不允许改变 2 数据类型仔细观察上面的 Class 文件格式 可以看出 Class 文件格式采用一种类似于 C 语言结

    2025年10月28日
    4
  • jquerycdn国内地址_jquery 官网

    jquerycdn国内地址_jquery 官网JqueryCDN如果您不希望下载并存放jQuery,那么也可以通过CDN(内容分发网络)引用它。StaticfileCDN、百度、又拍云、新浪、谷歌和微软的服务器都存有jQuery。如果你的站点用户是国内的,建议使用百度、又拍云、新浪等国内CDN地址,如果你站点用户是国外的可以使用谷歌和微软。如需从StaticfileCDN、又拍云、新浪、谷歌或微软引用jQuery,请使用以下代码之一:StaticfileCDN:<head><script.

    2025年8月20日
    4
  • 新东方官网老师_杭州新东方老师排名

    新东方官网老师_杭州新东方老师排名http://blog.sina.com.cn/m/xdfzhangxia   

    2025年11月8日
    2
  • 什么是备胎算法?_备胎怎么解释

    什么是备胎算法?_备胎怎么解释什么是备胎算法?

    2022年4月22日
    54
  • <asp: DropDownList>实现事件处理「建议收藏」

    <asp: DropDownList>实现事件处理「建议收藏」需求:从上面的截图中,可以看到这是两个控件实现的界面,现在的需求是这样的,实现当选择第一个下拉控件并选择了相应的数据后,那么此时在第二个中进行绑定他的子类在此显示,从而实现页面两级菜单实现数据统一绑定。解决办法:  tr>                   th>服务大类th>                    td class=”pro_title_css”>     

    2025年11月1日
    2
  • 较具体的介绍JNI

    较具体的介绍JNI

    2021年11月23日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号