详细了解C# 枚举与位枚举

 更新时间:2020年11月3日 15:20  点击:2420

一、枚举的概念:

  C# 枚举(Enum), 枚举类型是用于声明一组命名的常数的基本数据类型(值类型);

二、枚举的定义:

  声明enum变量:

enum <enum_name> {enumeration list};

  其中enum_name 指定枚举的类型名称;  enumeration list 是一个用逗号分隔的标识符列表;

  枚举列表中的每个符号代表一个整数值,一个比他前面的符号大的整数值。默认情况下,第一个枚举符号的值是0.例如:

enum Days {Sun , Mon, tue, Fir, sat };

三、枚举的案例,枚举变量的用法:

using System;
namespace EnumApplication
{
 class EnumProgram
 {
   enum Days { Sun, Mon, tue, Wed, thu, Fri, sat };
   
   static void Main(string[] args)
   {
    int WeekdayStart = (int)Days.Mon;
    int WeekdayEnd = (int)Days.Fir;
    Console.WriteLine("Monday:{0}",WeekdayStart); 
    Console.WriteLine("Firday:{0}",WeekdayEnd ); 
    Console.ReadKey();
   } 
 }
}

四、Enum类:

  所有枚举类型都隐式地继承System.Enum 类型, System.Enum 类型是继承自System.ValueType类型唯一不为值类型的引用类型;

五、Enum 类:

方法 描述
CompareTo 将此实例与指定对象进行比较并返回一个对二者的相对值的指示
Equals:指示此实例是否等于指定的对象;
Format 根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式
GetName 在指定枚举中检索具有指定值的常数的名称
GetNames 检索指定枚举中常数名称的数组
GetTypeCode 返回此实例的基础TypeCode
GetUnderlyingTye 返回指定枚举的基础类型
GetValues 指定枚举中常数值的数组
HasFlag 确定当前实例中是否设置了一个或多个位域
IsDefined 返回指定枚举中是否存在具有指定值的常数的指示
Parse 将一个或多个枚举常数的名称或数字值得字符串表示转换成等效得枚举对象,一个参数指定该操作是否不区分大小写
TryParse 将一个或多个枚举常数得名称或数字值得字符串表示转换成等效得枚举对象,用于指示转换是否成功得返回值

六、标志枚举/位枚举:

  C# 标记枚举(Flags):枚举类型是用于声明一组命名得常数得基本类型数据(值类型)。

  枚举值是互斥得。而位标记集合是一种由组合出现得元素形成得列表,通常设计为以“位或”运算组合新值;

  枚举类型则通常表达一种语义相对独立得数值集合。而以枚举类型来实现位标记集合是最完美得组合,简称位枚举。

七、位枚举得定义: 

///<summary>
  /// 权限枚举
  ///</summary>
  [Flags]
  public enum permission                     注意加了[Flags]特性后有三种写法,
  {                                  一种是使用<<符号,
    Unknown = 0; // 也可以写成0x00或0             第二种是0x01,                
                                    还有一种是直接写0,1,2,4,8....,
    Create = 1<<0, // 0x01或1                 一般来说是2的n次方来表示。  
                                    注:<<左操作符,表示对这个数进行移位。
   Read = 1<<1, //0x02或2

    Update = 1<<2, //0x04或4

    Delete = 1<<3 //0x08或8
  }

八、位枚举的实例:

//1、给用户创建、读取,修改和删除的权限
var parmission = Permission.Create | parmission.Read | parmission.Update | parmission.Delete;

//2、去掉用户的修改和删除权限
parmission = parmission &~parmission.Update;
parmission = parmission &~parmission.Delete;

//3、给用户加上修改的权限
parmission = parmission | parmission.Update;

//4、判断用户是否有创建的权限
var isCreate = (parmission & parmission.Create)!=0;
//或者
var isCreate = (parmission & parmission.Create)==parmission.Create;
  这时parmission枚举的值将变成0+1+4=5,它的ToSting()将变成“parmission.Create,
  parmission.Read”,parmission.Update; 这里我们可以解释为什么第五个值Delete是8而不能成为5。
  也就是说它的值不应该是前几项值的复合值。一个比较简单的方法
  就是用2的n次方来依次位每一项赋值,例如:1,2,4,8,16,32,64.......。

以上就是详细了解C# 枚举与位枚举的详细内容,更多关于C# 枚举与位枚举的资料请关注猪先飞其它相关文章!

[!--infotagslink--]

相关文章

  • C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
  • 浅谈C# 字段和属性

    这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#实现简单的Http请求实例

    这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
  • C#中new的几种用法详解

    本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)

    这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • c#中(&&,||)与(&,|)的区别详解

    这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#绘制曲线图的方法

    这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#中list用法实例

    这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25