You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#枚举相关技术疑问:枚举类型、成员本质及实例解析

C# 枚举(Enum)相关问题解答

问题1:ArrivalStatus是否是通过该语法创建的类,且属于Enum类的子类?

是的。你用enum语法声明的ArrivalStatus,会被编译器编译成一个密封值类型类,并且自动隐式继承自System.Enum——不需要你显式写继承代码,编译器会帮你处理这层关系。它本质上是类的特殊实现,同时具备值类型的特性。

问题2:枚举成员ArrivalStatus.Early、OnTime、Late是否为ArrivalStatus类的实例/对象?这些成员与该类的关联方式是什么?语法ArrivalStatus.Early是否意味着ArrivalStatus是类,Early是该类的静态属性?

  • 这些枚举成员都是ArrivalStatus类型的实例,但它们是编译器生成的静态只读常量实例。
  • 编译器会把每个枚举成员编译为ArrivalStatus类的静态只读字段,字段的值就是对应枚举值的实例。所以ArrivalStatus.Early可以理解为:ArrivalStatus是类,Early是它的静态成员(准确说是静态只读字段),这个字段存储了一个ArrivalStatus实例,其底层数值为1。

额外疑问1:在ArrivalStatus status = ArrivalStatus.OnTime;中,ArrivalStatus.OnTime是否为ArrivalStatus类的对象,即对象的值?

是的。ArrivalStatus.OnTime就是ArrivalStatus类型的一个实例(对象),它的底层数值是0。这里的赋值操作,就是把这个预定义的枚举实例赋值给status变量,status最终存储的就是这个实例的值。

额外疑问2:在ArrivalStatus status1 = new ArrivalStatus();中,new ArrivalStatus()是否等同于枚举实例(即ArrivalStatus类的对象)?

这种写法完全不合法,编译器会直接报错。因为枚举类型是密封的,而且编译器没有为它提供无参构造函数,你不能用new关键字直接创建枚举实例。获取枚举实例的合法方式只有两种:一是使用预定义的枚举成员(比如ArrivalStatus.OnTime),二是通过强制类型转换(比如(ArrivalStatus)2)。


内容的提问来源于stack exchange,提问作者Deva Raja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:02:29