在Java中,枚举可以拥有构造函数、成员变量和函数。
我想知道C#枚举是否也能实现这样的功能。如果可以,怎样实现呢?
非常感谢!
唯一类似于这样的方法是使用扩展方法,它可以使枚举看起来像拥有成员方法。
除此之外,您可以创建一个伴随结构体类型到您的枚举中,该结构体有一个属性用于枚举值,并添加额外的属性和方法以支持该值。
我一直喜欢做的一件事就是在我的枚举上使用Description属性,这样我就可以轻松地存储3个值。
Public Enum States
{
[Description("Florida")]
FL = 124
}
然后我有一个类,可以轻松地读取/写入描述属性,因此我可以将整个数据库代码表存储在枚举文件中。除了所有海报提出的扩展方法,您还可以使用属性来驱动与枚举类的日志。
您仍然需要利用另一个类来实际处理枚举,但是您可以使用属性为枚举添加更多深度,而不仅仅是具有基本键/值对。
不是这样的。在Java中,枚举是一个类,而在C#中,枚举只是将基本类型包装起来的语法糖。
枚举是强类型常量。它们本质上是允许您为整数值分配符号名称的唯一类型。在C#传统中,它们是强类型的,这意味着一个类型的枚举可能不能隐式地分配给另一个类型的枚举,即使它们成员的基础值相同。同样,在整数类型和枚举之间也不能隐式地互换。不同枚举类型和整数类型之间的所有赋值都需要显式转换。
您不能在枚举中使用成员变量或构造函数。也许您要找的是结构体。
结构体类型是一种值类型,可以包含构造函数、常量、字段、方法、属性、索引器、运算符、事件和嵌套类型。结构体的声明形式如下:
你可以模仿Java的TypeSafe枚举模式(在Java 5引入枚举之前非常常见):
请参见此处的第21项(警告,PDF链接)进行描述。
如果对象功能比switch功能更重要,则应执行此操作,因为在C#中,您可以在没有它的情况下获得类型安全性(在Java 5之前无法实现)。
在C#中这是不可能的。枚举只能有名称/值成员。
你可以为枚举类型定义扩展方法,但是你不能向枚举添加状态,因为枚举在内部表示为简单的整数类型,没有地方存储状态。