枚举类型本质上是一个字典,它将一组字符串映射到一组整数值。每个枚举常量都具有一个关联的整数值,默认情况下,第一个枚举常量的值为 0,后续枚举常量的值会自动加 1。
System.Enum 类型和 enum 类型。
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
枚举(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 类型都是用于枚举类型的,但是它们的实现方式和用法有所不同。在实践中,我们通常可以选择适合具体场景的方式进行枚举类型的定义和操作。