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);}
输出:
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特性相关推荐
- [C#]Attribute特性(2)——方法的特性及特性参数
上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...
- 特性Attribute
1.Attribute介绍 我们用VS进行编程时,智能提示再提供方法和属性列表的时候,有时会有下面的这种情况: 提示某个方法已经是过时的了,还会给与提示信息.出现此效果就是Attribute(特 ...
- C#的特性Attribute
一.什么是特性 特性是用于在运行时传递程序中各种元素(比如类.方法.结构.枚举.组件等)的行为信息的声明性标签,这个标签可以有多个.您可以通过使用特性向程序添加声明性信息.一个声明性标签是通过放置在它 ...
- C# 特性 Attribute
特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属性.方法等具有某些统一的特征,从而达到某些特殊的需要.举个小栗子:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作.文件 ...
- .net 特性 Attribute
public sealed class RemarkAttribute : Attribute{public string Remark { get; set; }// 构造函数public Rema ...
- 区分元素特性attribute和对象属性property
定义 元素特性attribute是指HTML元素标签的特性 下面的id.class.title.a都是特性,其中a叫做自定义特性 <div id="id1" class=&q ...
- .NET基础编程之特性 - Attribute
这一篇文章是给大家介绍的是:.NET基础编程之特性 - Attribute,对这一部分掌握不熟悉的同学,可以仔细的看一下! 一.特性简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集. ...
- 第十一节:特性(常见的特性标签、自定义特性、特性的使用案例)
一. 基本概念 1. 什么是特性? MSDN官方给出的定义时:公共语言运行时允许添加类似关键字的描述声明,叫做特性,它对程序中的元素进行标注,如类型.字段.方法和属性等.Attribute和Micro ...
- modern php笔记---2.1、特性(命名空间、特性、性状)
modern php笔记---2.1.特性(命名空间.特性.性状) 一.总结 一句话总结: legend2是真的非常好用,资质起码提升5倍,也就是学习效率提升了起码5倍 1.命名空间实质? 从技术层面 ...
- C++11特性及其它常用特性
文章目录 C++11特性及其它常用特性 1. explicit 关键字 2. 左值和右值的概念 3. 函数返回值当引用 4. C++11 新增容器 - array array容器概念 array特点 ...
最新文章
- 微服务系列(七):将单体应用改造为微服务
- windows 10 常用快捷键
- map-reduce的八个流程
- DVWA--Brute Force(暴力破解)--四个等级
- ‘packaging‘ with value ‘jar‘ is invalid. Aggregator projects require ‘pom‘ as packaging.
- python实现单张图像拼接与批量图片拼接
- 无盘服务器pnp,无盘系统PNP方法详细说明
- 【VTK】VTK 之一 环境准备
- .Net转Java自学之路—基础巩固篇三十(JDBC)
- Bat+PowerShell实现windows网络一键共享
- 排序算法之python实现(上)
- 学CNC编程,首先要从哪里开始?
- __builtin_choose_expr
- 拼多多店铺昨天还好好的,今天突然没流量,怎么回事?
- NeoCognitron
- Java过滤字符串中的手机号+提取字符串中的手机号+验证是否存在手机号
- 微信加密聊天工具(持续开发中)
- java通过filter单点登陆
- Android记事本
- Matlab 网格剖分程序DistMesh函数指南