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


相关推荐

  • 修改mysql的密码_sql数据库修改密码

    修改mysql的密码_sql数据库修改密码MySQL是一个关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。搭配PHP和Apache可组成良好的开发环境。因此用的很广泛。很多人都会遇到MySQL需要修改密码的情况,比如密码太简单、忘记密码等等。这里我就教大家几种修改MySQL密码的方法。这里以修改root密码为例,操作系统为windows。注意:修改MySQL是需要有mysql里的root权限的,

    2022年8月12日
    4
  • 为何投奔BSD

    为何投奔BSD

    2021年8月24日
    57
  • Merkle Tree 概念

    Merkle Tree 概念

    2021年6月18日
    119
  • keras系列︱Sequential与Model模型、keras基本结构功能(一)

    keras系列︱Sequential与Model模型、keras基本结构功能(一)不得不说,这深度学习框架更新太快了尤其到了Keras2.0版本,快到Keras中文版好多都是错的,快到官方文档也有旧的没更新,前路坑太多。到发文为止,已经有theano/tensorflow/CNTK支持keras,虽然说tensorflow造势很多,但是笔者认为接下来Keras才是正道。笔者先学的caffe,从使用来看,比caffe简单超级多,非常好用,特别是重新训练一个模型,但是

    2025年8月22日
    3
  • 使用内存盘加快开发效率 (UltraRAMDisk,Jetbrains Idea,java)

    使用内存盘加快开发效率 (UltraRAMDisk,Jetbrains Idea,java)环境:Windows1020H2IntelliJIDEA2020.2.4x64JDK1.8内存盘软件:内存盘软件ultraramdisk官方地址CSDN资源链接://TODO硬件:i797001TB机械盘ddr426668G*2步骤0:内存大小根据实际内存去分配合理的大小动态分配内存根据需要备份和恢复根据自身需要,(关机速度会很慢内存盘内所有数据会写入到该镜像文件内)步骤1:我这边是选择直接将已有的idea软件…

    2022年5月7日
    48
  • Modelsim下载 安装 与 和谐教程

    Modelsim下载 安装 与 和谐教程一.下载ModelsimSE-642019.2-windows网盘分享:链接:https://pan.baidu.com/s/1BASOJ1DYZYrK9Ot_BRs7HA提取码:md4d二.安装下载完压缩包后解压,安装按下图所示步骤进行。注意,完全退出杀毒软件如360,否则可能安装/和谐失败。自此安装完成,下面进行和谐。三.和谐运行patch.dll会生成LICENSE.TXT文件,将此文件另存到modelsim安装路径下。建立用户环境变量:.

    2022年6月15日
    34

发表回复

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

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