2009-09-14 119 views

回答

4

做类似的事情的唯一方法是使用扩展方法,这可以使它看起来好像枚举具有成员方法。

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

0

不是直接的,但你可以使用扩展方法来提供类似的功能

0

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

0

据我所知,没有你不能在C#中。虽然你为什么也想要?似乎有点奇怪的东西附加变量和功能呢!

+2

你想要它做的正确的面向对象编程 - 涉及与枚举本身的枚举,而不是所有的地方开关条款放行为。 – 2009-09-14 15:12:55

+0

,因为我在java中做了很多。它实际上是我最喜欢的功能之一;)例如,你有一个枚举高度,并且在每一个中你都有一个包含实际高度的额外最终成员。 SMALL.height = 80,NORMAL.height = 100,BIG.height = 120 – clamp 2009-09-14 15:12:55

+0

我想这取决于你希望你的枚举做什么,但我不能想象我的需要做到这一点。至于OO,通常我有一个包装enum的类来提供我需要的任何OO主题。 – Siyfion 2009-09-14 17:53:23

1

不是。在Java中,枚举是一个类,而在C#中,枚举只是包装原始类型的语法糖。

0

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

1

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

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

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

1

你可以模仿的Java类型安全枚举模式(在Java中什么是如此普遍,之前在Java 5中引入枚举来解决它):

见项目21 here(警告,PDF链接)的描述。

如果对象功能比开关功能更重要,那么你会这样做,因为在C#中,如果没有它,你可以得到类型saftey(这在5之前你无法使用Java)。

1

有一件事我一直喜欢做的就是用我的枚举Description属性,所以我可以存储我的枚举3个值容易

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

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

你仍然需要利用另外一个类来实际做的枚举的东西,但你可以使用属性来更深入添加到您的枚举,而不是只具有键/值对,它基本上是。