C#中的枚举 Enum和enum的区别

2023-05-16

枚举类型本质上是一个字典,它将一组字符串映射到一组整数值。每个枚举常量都具有一个关联的整数值,默认情况下,第一个枚举常量的值为 0,后续枚举常量的值会自动加 1

C# 中有两种枚举类型:System.Enum 类型和 enum 类型

Enum类

System.Enum 类型是 C# 类型系统中的一个抽象类,它是所有枚举类型的基类可以将任何一个枚举类型都视为 System.Enum 类型。System.Enum 类型提供了一些方法和属性,用于枚举类型的操作,例如获取枚举类型的名称、值、类型,以及将枚举类型转换为字符串等。

以下是一个名为 MyEnum 的枚举类型的底层实现:

public sealed class MyEnum : System.Enum {
    public const int None = 0;
    public const int A = 1;
    public const int B = 2;
    public const int C = 3;
    
    public static readonly MyEnum none;
    public static readonly MyEnum a;
    public static readonly MyEnum b;
    public static readonly MyEnum c;
    
    static MyEnum();
    public static MyEnum[] GetValues();
    public static string[] GetNames();
    public static string GetName(int value);
    public static bool IsDefined(Type enumType, object value);
    public static readonly Type ValueType;
    public static readonly Type UnderlyingType;
    public static MyEnum Parse(string value);
    public static MyEnum Parse(string value, bool ignoreCase);
}

enum

C# 中,枚举(enum)是一种值类型,它用于定义枚举类型,表示一组具有一定可枚举范围的常量。虽然enum关键字定义的类型是一个值类型而不是一个类,但是在编译时,编译器会自动成enum类型转换为Enum类型(一个具有一组含义的数字常量的类)。enum 类型与普通的类和结构体不同,它不能继承,不能包含方法或属性,并且enum 类型定义的枚举常量是整数类型,每个枚举常量都对应一个唯一的整数值。这些限制使得enum更加简单和安全,更适合作为枚举类型的实现方式。因此,可以把C#的enum看做是对Enum类的一种包装或语法糖。

以下是 C# 中使用 enum 定义一个枚举类型的示例代码:

public enum MyEnum {
    None = 0,
    A = 1,
    B = 2,
    C = 3
}

总结

C# 中的 Enum 类和 enum 关键字都用于定义枚举类型,它们各有优劣和适用场景。

区别:

  • Enum 类是C# 系统中提供的一个抽象类,包含了一系列静态方法,用于操作枚举类型。可以继承 Enum 类来自定义枚举类型的行为。

  • enum 关键字是 C# 提供的一种语法,用于定义枚举类型,并指定一组枚举常量。使用 enum 关键字时,所有的枚举常量都默认是整数类型,并且不能继承其他类或结构体。

使用场景:

  • 需要自定义枚举类型的属性和方法,可以选择继承 Enum 类,并定义自己的枚举类型。例如,可以定义一个枚举类型来表示颜色,然后通过继承 Enum 类,为其添加一个名为 GetColorCode 的方法来获取颜色的 RGB 值。

  • 若只需要简单地定义一组枚举常量,可以使用 enum 关键字。例如,可以使用 enum 关键字定义一个枚举类型来表示星期几,其中每个枚举常量都对应一个整数值。

需要注意的是,使用Enum点操作访问枚举值时,实际上是在访问枚举类型的静态成员。这些静态成员包括枚举值和枚举值的基础类型的一些属性。因此,这与从枚举值上调用实例方法是不同的。

总的来说,System.Enum 类型和 enum 类型都是用于枚举类型的,但是它们的实现方式和用法有所不同。在实践中,我们通常可以选择适合具体场景的方式进行枚举类型的定义和操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#中的枚举 Enum和enum的区别 的相关文章

  • C++中的枚举(enum)

    C 43 43 中的枚举 enum 枚举类型 enumeration 是 C 43 43 中的一种派生数据类型 xff0c 它是由用户定义的若干枚举常量的集合 枚举是一个数值集合 xff0c 是给一个值命名的一种方法 如果想要使用整数来表示
  • C++枚举enum使用详解

    目录 一 什么是枚举enum WHAT 二 使用枚举enum的场景 WHEN and WHERE 三 如何使用枚举enum HOW 1 xff09 枚举的定义 2 xff09 枚举的初始化 3 xff09 指定枚举类型 4 声明枚举对象 5
  • C语言 -- enum 枚举的使用

    一 枚举的定义 枚举是C语言的一种基本的数据类型 enum 枚举名 枚举元素1 枚举元素2 我们以星期举例 enum DAY MON 61 1 TUE WED THU FRI SAT SUN 如果没有赋值 xff0c 第一个枚举成员的默认值
  • C#之enum,枚举类型的简介和使用

    枚举类似于数组 xff0c 但两者的定义方法和设计目的不同枚举中的值会放在栈中枚举类型不能直接放在方法中 xff0c 一般放在命名空间中或与类同级枚举使用enum关键字进行定义 xff0c 枚举类型的定义其实和类的成员定义相似 xff0c
  • enum 与string的转换

    从enum转换为string可以用ToString 方法 xff0c 如果从string转化为enum xff1a var domInt 61 Convert ToString row 34 DomInt 34 FlightDomInt d
  • c语言enum枚举字符串,c语言enum使用_enum枚举变量

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 二 enum枚举 1 枚举的定义 枚举类型定义的一般形式为 xff1a enum 枚举名 枚举值表 在枚举值表中应罗列出所有可用值 这些值也称为枚举元素 例如 xff1a 该枚举名为weekda
  • java枚举(enum)使用详解

    文章目录 前言一 枚举类型定义二 访问成员三 遍历四 在switch xff08 xff09 中使用枚举五 方法1 内置方法1 1 ordinal 用于返回成员的索引1 2 compareTo 用于比较枚举类型中两个成员的索引值1 3 va
  • enum to string c++17 Magic Enum

    Magic Enum header only library provides static reflection for enums to string from string iteration for C 43 43 17 c 43
  • 枚举(enum)

    一 什么是枚举 我们学习过单例模式 xff0c 即一个类只有一个实例 而枚举其实就是多例 xff0c 一个类有多个实例 xff0c 但实例的个数不是无穷的 xff0c 是有限个数的 例如word文档的对齐方式有几种 xff1a 左对齐 居中
  • C语言枚举类型(C语言enum用法)详解

    在实际编程中 xff0c 有些数据的取值往往是有限的 xff0c 只能是非常少量的整数 xff0c 并且最好为每个值都取一个名字 xff0c 以方便在后续代码中使用 xff0c 比如一个星期只有七天 xff0c 一年只有十二个月 xff0c
  • C++中enum与字符串或CString互相转换的方法

    C 43 43 中没有专门为enum与字符串或CString互相转换的直接方法 xff0c 但是工作中会常遇到相互转换的场景 下面介绍一种自己实现的方法 xff0c 首先得定义一个enum类型 xff0c 同时 xff0c 定义一个与之对应
  • C++详解:枚举类型 --- enum | Xunlan_blog

    文章目录 一 概念二 定义枚举元素表 三 定义枚举对象的操作 四 要点 amp 技巧实例 一 概念 枚举类型 enumeration xff0c 是C 43 43 中的一种派生数据类型 xff0c 是用户创建的一个集合 xff0c 可以增加
  • c++打印enum class

    span class token keyword enum span span class token keyword class span span class token class name A span span class tok
  • java枚举(enum)使用详解

    文章目录 前言一 枚举类型定义二 访问成员三 遍历四 在switch xff08 xff09 中使用枚举五 方法1 内置方法1 1 ordinal 用于返回成员的索引1 2 compareTo 用于比较枚举类型中两个成员的索引值1 3 va
  • 枚举(enum)

    一 什么是枚举 我们学习过单例模式 xff0c 即一个类只有一个实例 而枚举其实就是多例 xff0c 一个类有多个实例 xff0c 但实例的个数不是无穷的 xff0c 是有限个数的 例如word文档的对齐方式有几种 xff1a 左对齐 居中
  • 深入理解Java枚举类型(enum)

    版权申明 未经博主同意 xff0c 谢绝转载 xff01 xff08 请尊重原创 xff0c 博主保留追究权 xff09 http blog csdn net javazejian article details 71333103 出自 z
  • Java枚举的使用

    枚举类型可以取代以往常量的定义方式 即将常量封装在类或接口中 此外 枚举类型还提供了安全检查功能 枚举类型本质上还是以类的形式存在 1 使用枚举类型设置常量 以往设置常量 通常将常量放置在接口中 这样在程序中就可以直接使用了 并且该常量不能
  • C++枚举类型用法总结(enum)(可以用枚举字符常量代替常量)

    C 枚举类型enum表示枚举 通常用于定义个新类型的字符常量 比如enum January February March 枚举类型的作用域一般是整个文件或者类内 当枚举类型定义在文件开头时 则作用域是从定义位置开始往后 不包括函数内定义 当
  • 枚举类中通过code值获取对应的desc值

    Getter NoArgsConstructor public enum TaskRecordTypeEnum STOPTASK 0 禁用任务 STARTTASK 1 启用任务 private int code private String
  • 【chatGPT】让java程序员工作效率翻10倍技巧

    本来写给我自己用来着 想着以后忘记了就分享出来 1 写枚举 对于程序员来说枚举的命名需要大写并且写枚举也是被迫的 大部分人的感受都一样啊喂 所以可以直接用chatgpt偷懒 录入关键字 例 帮我写个java枚举 xxxxx 活动兑奖状态 0

随机推荐