c#enums:他们可以使用java enums等成员和函数吗?

在java中,可以给枚举一个构造函数以及成员变量和函数。

我想知道在c#enums中是否有可能这样的事情。 如果是这样,怎么样?

非常感谢!

执行与此类似的操作的唯一方法是使用扩展方法,这可以使它看起来好像枚举具有成员方法。

除此之外,您可以为枚举创建一个伴随结构类型,该类型具有枚举值的属性,然后添加其他属性和方法以支持该值。

它不是。 在Java中,枚举是一个类,而在C#中,枚举只是包含基本类型的语法糖。

枚举是强类型常量。 它们本质上是唯一的类型,允许您将符号名称分配给整数值。 在C#传统中,它们是强类型的,这意味着即使其成员的基础值相同,也不能将一种类型的枚举隐式赋值给另一种类型的枚举。 同样,整体类型和枚举也不是可以互换的。 不同枚举类型和整数类型之间的所有赋值都需要显式强制转换。

您不能在枚举中使用成员变量或构造函数。 也许你正在寻找的是一个结构。

结构类型是一种值类型,可以包含构造函数,常量,字段,方法,属性,索引器,运算符,事件和嵌套类型。 结构的声明采用以下forms:

您可以模仿Java TypeSafe枚举模式(在Java 5中引入枚举之前,Java中常见的模式):

有关说明,请参见此处的第21项(警告,PDF链接)。

如果对象function比交换机function更重要,你会这样做,因为在C#中你可以得到没有它的类型安全(在5之前你不能用Java)。

我一直喜欢做的一件事是在我的枚举上使用Description属性,这样我就可以轻松存储3个枚举值

Public Enum States { [Description("Florida")] FL = 124 } 

然后我有一个类可以轻松读取/来自description属性,因此我可以将整个数据库代码表存储在枚举文件中。 除了提出扩展方法的所有海报之外,您还可以使用属性来使用枚举类来驱动日志。

您仍然需要利用另一个类来实际使用枚举执行某些操作,但您可以使用属性为枚举添加更多深度,而不是仅仅具有它基本上的键/值对。

不是直接但您可以使用Extension方法提供类似的function

这在C#中是不可能的。 枚举只能有名称/值成员。

据我所知,不,你不能在C#。 虽然你为什么也想要? 连接变量和函数似乎有点奇怪!

您可以为枚举类型定义扩展方法,但不能向枚举添加状态,因为枚举在内部表示为简单的整数类型,并且无处存储状态。