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

时间:2009-09-14 15:00:24

标签: c# java enums

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

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

非常感谢!

9 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

有关说明,请参阅第21项here(警告,PDF链接)。

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

答案 4 :(得分:1)

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

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

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

你仍然需要利用另一个类来实际使用枚举做一些事情,但你可以使用属性为你的枚举添加更多深度,而不是仅仅拥有它基本上的键/值对。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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