本文参考自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);}

输出:

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

C# 特性(Attribute)之Flag特性相关推荐

  1. [C#]Attribute特性(2)——方法的特性及特性参数

    上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...

  2. 特性Attribute

    1.Attribute介绍    我们用VS进行编程时,智能提示再提供方法和属性列表的时候,有时会有下面的这种情况: 提示某个方法已经是过时的了,还会给与提示信息.出现此效果就是Attribute(特 ...

  3. C#的特性Attribute

    一.什么是特性 特性是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签,这个标签可以有多个.您可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它 ...

  4. C# 特性 Attribute

    特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属性.方法等具有某些统一的特征,从而达到某些特殊的需要.举个小栗子:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作.文件 ...

  5. .net 特性 Attribute

    public sealed class RemarkAttribute : Attribute{public string Remark { get; set; }// 构造函数public Rema ...

  6. 区分元素特性attribute和对象属性property

    定义 元素特性attribute是指HTML元素标签的特性 下面的id.class.title.a都是特性,其中a叫做自定义特性 <div id="id1" class=&q ...

  7. .NET基础编程之特性 - Attribute

    这一篇文章是给大家介绍的是:.NET基础编程之特性 - Attribute,对这一部分掌握不熟悉的同学,可以仔细的看一下! 一.特性简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集. ...

  8. 第十一节:特性(常见的特性标签、自定义特性、特性的使用案例)

    一. 基本概念 1. 什么是特性? MSDN官方给出的定义时:公共语言运行时允许添加类似关键字的描述声明,叫做特性,它对程序中的元素进行标注,如类型.字段.方法和属性等.Attribute和Micro ...

  9. modern php笔记---2.1、特性(命名空间、特性、性状)

    modern php笔记---2.1.特性(命名空间.特性.性状) 一.总结 一句话总结: legend2是真的非常好用,资质起码提升5倍,也就是学习效率提升了起码5倍 1.命名空间实质? 从技术层面 ...

  10. C++11特性及其它常用特性

    文章目录 C++11特性及其它常用特性 1. explicit 关键字 2. 左值和右值的概念 3. 函数返回值当引用 4. C++11 新增容器 - array array容器概念 array特点 ...

最新文章

  1. 微服务系列(七):将单体应用改造为微服务
  2. windows 10 常用快捷键
  3. map-reduce的八个流程
  4. DVWA--Brute Force(暴力破解)--四个等级
  5. ‘packaging‘ with value ‘jar‘ is invalid. Aggregator projects require ‘pom‘ as packaging.
  6. python实现单张图像拼接与批量图片拼接
  7. 无盘服务器pnp,无盘系统PNP方法详细说明
  8. 【VTK】VTK 之一 环境准备
  9. .Net转Java自学之路—基础巩固篇三十(JDBC)
  10. Bat+PowerShell实现windows网络一键共享
  11. 排序算法之python实现(上)
  12. 学CNC编程,首先要从哪里开始?
  13. __builtin_choose_expr
  14. 拼多多店铺昨天还好好的,今天突然没流量,怎么回事?
  15. NeoCognitron
  16. Java过滤字符串中的手机号+提取字符串中的手机号+验证是否存在手机号
  17. 微信加密聊天工具(持续开发中)
  18. java通过filter单点登陆
  19. Android记事本
  20. Matlab 网格剖分程序DistMesh函数指南

热门文章

  1. [转]史上最最最详细的手写Promise教程
  2. MySQL/InnoDB中,对于锁的认识
  3. 第3章第1讲算法与流程图
  4. SVN 客户端的安装与配置
  5. JAVA聊天室简易版1.0(多线程)
  6. sqlserver 获取当前操作的数据库名称
  7. access与sqlserver数据转换
  8. 2019,数据库行业迎50年第二次巨变
  9. 3013C语言_输入输出
  10. linux下无法创建组