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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm怎样添加解释器_pycharm2017解释器

    pycharm怎样添加解释器_pycharm2017解释器如何配置pycharm里面的python解释器?

    2022年8月28日
    3
  • springcloud微服务搭建_域名301重定向教程

    springcloud微服务搭建_域名301重定向教程前言1.由于我只有一台nginx服务器,那么想要实现一个服务器的多个网站的搭建,在html目录下建立多个文件夹,并用url转发使得不同的二级域名指向html文件夹下的不同子文件夹,这样做便能做到“多个网站”的效果。2.url转发也能够使得一个网站拥有几个域名比如wikipedia.com和wikipedia.net都指向了wikipedia.org。当你访问wikipedia.com或wikipedia.net的时候,跳转出来的页面是wikipedia.org的页面3.重定向是带有状态码的响应,我

    2022年10月19日
    6
  • QT QList介绍及应用

    QT QList介绍及应用QList是目前最常用的容器类,它存储了给定类型的值的一个列表,而这些值可以通过索引访问。QList使用数组来实现,以确保进行快速的基于索引的访问。使用QList::append和QList::prepend在列表的两端进行添加项目。使用QList::insert()在列表的中间插入项目。实例:#include<QCoreApplication>#include<Q…

    2025年6月14日
    5
  • 网站管理后台帐号密码暴力激活成功教程方法

    网站管理后台帐号密码暴力激活成功教程方法【导读】对于网站运行的个人站长而言,最担心的是应如何有效且安全的去管理自己的网站,否则自己辛辛苦苦经营的网站就会被不请自来的不速之客给攻破,轻则站点数据被窃取,重则整个网站都被攻陷,导致无法恢复。本文主要从管理后台这个方面来讲解其黑客攻击过程,并通过在虚拟环境中展开实例演示,各读者可以跟着本教程去做实验,通过实验加强对攻击过程的了解,如果你是一名菜鸟站长也可以针对性的去做一下防护方案。…

    2022年8月22日
    9
  • C#修改connectionStrings的方法

    C#修改connectionStrings的方法读取protectedvoidPage_Load(objectsender,EventArgse){CheckLoginMyChk=newCheckLogin();title.InnerHtml=”<b>数据库连接配置</b>”;if(!IsP…

    2022年5月11日
    36
  • c语言编写机器人程序(C程序设计教程)

    第一部分基本技能学习和实践第1讲一种新的C语言学习方式机器人与C语言学习平台任务1获得软件任务2安装软件任务3硬件连接任务4第一个程序任务5做完实验关断电源工程素质和技能归纳科学精神的培养第2讲最简单的C程序设计——机器人做算术任务1整型数据的运算和结果显示任务2浮点型数据的运算任务3字符型数据工程素质和技能归纳科学精神的培养第3讲循环程序设计——让机器人动起来C51单片机…

    2022年4月11日
    185

发表回复

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

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