zoukankan      html  css  js  c++  java
  • 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#中使用枚举可以处理这个问题。

  • 相关阅读:
    控制内插表达式的格式
    MySQL查看实时执行的SQL语句
    测试开源.net 混淆器ConfuserEx
    nginx 目录自动加斜线”/”
    兼职程序员一般可以从什么平台接私活?
    .NET之Hangfire快速入门和使用
    c#通过操作mongodb gridfs实现文件的数据库存储
    c# .net core + .net framework mongodb nuget 包
    asp.net core ModelState 模型状态验证扩展类
    Linux查看系统基本信息,版本信息(最全版)
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/6752822.html
Copyright © 2011-2022 走看看