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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux配置ip端口号

    linux配置ip端口号1./etc/httpd/conf.d/test.conf8000> ServerNametest.com//也可以是ip地址 DocumentRoot/var/www/test DirectoryIndexindex.htmlindex.php AddDefaultCharsetutf-8 DefaultLanguageutf-8 LanguagePriority

  • 虚拟机进入桌面命令_win7命令激活系统

    虚拟机进入桌面命令_win7命令激活系统一、NeoKylin系统基础命令1.1关机、重启和登出命令shutdown-hnow立即关闭系统init0关闭系统shutdown-tseconds按预定时间关闭系统shutdown-rnow立即重启reboot重启logout注销1.2系统相关信息date显示系统时间arch和uname-m显示处理器架构uname-r显示正在使用的内核版本cat/proc/cpuinfo查看cpu相关信息…

  • 超好听的英文名男孩_男生好听小众的英文名

    超好听的英文名男孩_男生好听小众的英文名TroyKentBrandonLandonCordBarneyBlaineVanVictorJulesDylanColeIggy/EgbertJackDoug/DouglasRyderTylerSethNemoDarrenFoleyBennettBrianPhil/PhilipEthanJusticeIvanElliottWilsonJoe/JosephZorbaLiamAdam

    2022年10月31日
  • html中table样式_table样式设置

    html中table样式_table样式设置如果想在网页中建一个如下table表格应该怎么做呢?首先建一个表<table><table>/*table标签就是建一个表格*/ <tr>/*tr标签就是tablerow,即为表格中的一行*/ <th>学号</th>/*th标签即tablehead,就是表头*/ <th>姓名</th> <th>手机号</th> <th>家庭地址</th&

  • B. 沙漠之旅(分组背包)

    B. 沙漠之旅(分组背包)

  • PathFileExists用法--使用#include

    PathFileExists用法--使用#includeBOOLPathFileExists(LPCTSTRpszPath);
            Determinesifafileexists.
    —经检测,该函数可以检测文件或目录是否存在!Remarks
    Thisfunctionteststhevalidityofthefileandpath.Itworksonlyonthelocalfilesystemoronaremotedrivethathasbeenmoun

发表回复

您的电子邮箱地址不会被公开。

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