1
194
clr中的枚举只是命名为常量。基础类型必须是整数。在Java中,枚举更像是一个类型的命名实例。该类型可能非常复杂,正如您的示例所示,它包含各种类型的多个字段。 要将示例移植到C,我只需将枚举更改为不可变类,并公开该类的静态只读实例:
|
2
201
在C中,您可以定义 extension methods 在枚举上,这弥补了一些缺失的功能。
你可以定义
我已经按照建议使用了自定义属性 Mikhail 但同样可以用字典来实现。
|
3
32
在C中,属性可以与枚举一起使用。这个编程模式的一个很好的例子是 here (代码项目)
编辑: 乔恩·斯基特最近再次提出并回答了这个问题: What's the equivalent of Java's enum in C#? Private inner classes in C# - why aren't they used more often? 编辑2: 见 accepted answer 它以非常出色的方式扩展了这种方法! |
4
12
Java枚举实际上是完整的类,它可以有一个私有的构造函数和方法等,而C ^枚举只是一个整数。IMO Java的实现远远优越。 This page should help you a lot while learning c# coming from a java camp. (链接指向有关枚举的差异(向上/向下滚动查看其他内容) |
5
4
我想是这样的:
或者将常量组合到
|
6
3
这是另一个有趣的想法,它迎合了Java中可用的习惯行为。我想出了以下几点
它有一个类型参数,基本上就是为了使序数能够在不同的派生枚举中正常工作。乔恩-斯基特
这有一些优势。
|
7
2
JavaEnUM是以OO方式呈现枚举的语法糖。它们是在Java中扩展EnUM类的抽象类,每个枚举值都类似于EnUM类的静态最终公共实例实现。查看生成的类,对于具有10个值的枚举“foo”,您将看到生成的“foo$1”到“foo$10”类。 不过,我不知道C,我只能推测该语言中的枚举更像C风格语言中的传统枚举。我从快速谷歌搜索中看到,它们可以保存多个值,因此它们可能以类似的方式实现,但比Java编译器允许的限制要大得多。 |
8
2
Java枚举允许使用编译器生成的Valueof方法从名称中轻松地进行类型转换,即
C中的原始枚举的等效值更详细:
但是,如果您沿着Kent建议的路线走,您可以轻松地实现
|
9
2
我怀疑C中的枚举只是clr内部的常量,但并不熟悉它们。我已经用Java解压缩了一些类,并且我可以告诉你,一旦Enums转换,就需要。 Java做了一些鬼鬼祟祟的事情。它将枚举类视为一个普通类,尽我所能,在引用枚举值时使用大量宏。如果在使用枚举的Java类中有一个case语句,那么它将替换枚举引用到整数。如果需要转到字符串,它将创建一个字符串数组,该数组由它在每个类中使用的序号索引。我怀疑是为了节省拳击的费用。 如果您下载这个解压程序,您将看到它是如何创建它的类并集成它的。说实话相当吸引人。我以前不使用枚举类,因为我认为它只对一个常量数组膨胀。我比你在C中使用它们的有限方式更喜欢它。 http://members.fortunecity.com/neshkov/dj.html ——Java反编译程序 |
10
0
Java中的枚举要比C.E.EnUM复杂得多,因此更强大。 因为它只是另一种编译时语法上的制糖,我想知道考虑到它在实际应用程序中的有限使用,是否真的值得包含这种语言。 有时候,把东西从语言中排除比放弃包含一个小特性的压力更难。 |
11
0
|
12
0
您还可以为每个枚举类型使用实用程序类,该类为每个枚举值保存具有高级数据的实例。
|