回答
做类似的事情的唯一方法是使用扩展方法,这可以使它看起来好像枚举具有成员方法。
除此之外,您可以为您的枚举创建一个伴随结构类型,该枚举具有枚举值的属性,然后添加其他属性和方法以支持该值。
不是直接的,但你可以使用扩展方法来提供类似的功能
这在C#中是不可能的。枚举只能有名称/值成员。
据我所知,没有你不能在C#中。虽然你为什么也想要?似乎有点奇怪的东西附加变量和功能呢!
不是。在Java中,枚举是一个类,而在C#中,枚举只是包装原始类型的语法糖。
您可以为枚举类型定义扩展方法,但不能将状态添加到枚举,因为枚举在内部表示为简单整数类型,并且无处可存储状态。
枚举是强类型的常量。它们本质上是独特的类型,允许您将符号名称分配给整数值。在C#传统中,它们是强类型的,这意味着即使其成员的基础值相同,一种类型的枚举也可能不会隐式分配给另一种类型的枚举。沿着相同的路线,整数类型和枚举不是可以互换的。不同的枚举类型和整型类型之间的所有赋值都需要明确的转换。
您不能在枚举中使用成员变量或构造函数。也许你正在寻找的是一个结构。
结构类型是一种值类型,可以包含构造函数,常量,字段,方法,属性,索引器,运算符,事件和嵌套类型。 struct的声明采用以下格式:
你可以模仿的Java类型安全枚举模式(在Java中什么是如此普遍,之前在Java 5中引入枚举来解决它):
见项目21 here(警告,PDF链接)的描述。
如果对象功能比开关功能更重要,那么你会这样做,因为在C#中,如果没有它,你可以得到类型saftey(这在5之前你无法使用Java)。
有一件事我一直喜欢做的就是用我的枚举Description属性,所以我可以存储我的枚举3个值容易
Public Enum States
{
[Description("Florida")]
FL = 124
}
然后,我有一个类,可以轻松地读取到/从description属性中,我可以将整个数据库代码表存储在枚举文件中。除了所有的海报提出了扩展方法,你可以使用属性来驱动你的枚举类的日志。
你仍然需要利用另外一个类来实际做的枚举的东西,但你可以使用属性来更深入添加到您的枚举,而不是只具有键/值对,它基本上是。
- 1. 枚举成员
- 2. JAXB/MOXy可以像常规类(非枚举)一样序列化枚举吗?
- 3. 枚举和指向成员
- 4. 我可以使用参数枚举吗?
- 5. Java枚举找到枚举
- 6. Java类枚举枚举类
- 7. Java的枚举和PostgreSQL枚举
- 8. 枚举函数
- 9. C++和枚举
- 10. 爪哇枚举和Objective-C枚举
- 11. 使用Java枚举
- 12. 我们可以在函数内部定义枚举吗?
- 13. 枚举里面的其他枚举
- 14. Python枚举类成员
- 15. 如何从枚举成员
- 16. 枚举结构的成员?
- 17. Java枚举与枚举在构造函数
- 18. 维护本地C++枚举和Java枚举同步
- 19. 查找未使用的枚举成员
- 20. Swift枚举函数
- 21. 枚举图像资源枚举
- 22. C++类枚举成员变量
- 23. c#LDAP的成员资格枚举
- 24. 枚举的联盟成员在C#
- 25. 是枚举Java中的枚举
- 26. Java在枚举中的枚举
- 27. Java:旧枚举子集的新枚举
- 28. 关于在C中使用枚举:是否可以改变枚举成员的值?
- 29. 我可以typdef一个枚举是另一个typdef枚举的扩展吗?
- 30. 使用列枚举的LINQ表枚举
你想要它做的正确的面向对象编程 - 涉及与枚举本身的枚举,而不是所有的地方开关条款放行为。 – 2009-09-14 15:12:55
,因为我在java中做了很多。它实际上是我最喜欢的功能之一;)例如,你有一个枚举高度,并且在每一个中你都有一个包含实际高度的额外最终成员。 SMALL.height = 80,NORMAL.height = 100,BIG.height = 120 – clamp 2009-09-14 15:12:55
我想这取决于你希望你的枚举做什么,但我不能想象我的需要做到这一点。至于OO,通常我有一个包装enum的类来提供我需要的任何OO主题。 – Siyfion 2009-09-14 17:53:23