2011-03-24 61 views
4
internal enum eCoinType 
{ 
    g = 0, 
    h = 1, 
    s = 2 
} 

我已经看到了这条线在同一代码:约枚举简单的问题

eCoinType coin = new eCoinType(); 

是什么意思?
Enum中的“新”声明有什么作用? 谢谢

回答

6

它创建一个eCoinType实例,默认值为0,对应于eCoinType.g。默认的构造函数是System.Enum class

请注意,尽管使用了关键字new,但您仍然创建值类型的项,因为枚举是值类型,而不是引用类型。这与使用new创建结构实例相似。

1

只要添加到@BoltClock所说的内容,它将创建一个eCoinType,其默认值为0,如果是数字类型,则为enum。所以它会等于:

// These all mean the same thing 
eCoinType coin = eCoinType.g;  // <-- This one is preferred, though 
eCoinType coin = new eCoinType(); 
eCoinType coin = default(eCointType); 
eCoinType coin = (eCoinType)0; 
+0

另外'eCoinType硬币=超载关键字默认(eCoinType)'。 – BoltClock 2011-03-25 00:00:04

+0

啊,好点,这是另一个好的。 – 2011-03-25 00:00:51

0

这是一种坏态度。我让程序员使用这个默认构造函数来枚举枚举的第一个值,而程序员实际上需要枚举的第一个值。请注意,有些人为现有枚举添加了值,而不关心顺序,如果他们将新值置于顶部,则会在代码中发现未定义的行为。

eCoinType cointype = new eCoinType(); 

在这种情况下等于

eCoinType cointype = eCoinType.g; 

但是,如果你修改eCoinType和g之前放的东西,你已经改变了应用程序逻辑。

Mybe存在对于一个用例(通过使用在不同的插件模块?声明枚举修改应用程序逻辑),但是尽可能多abscure如阴影在Visual Basic :)

+1

如果为每个枚举值显式定义数值,则顺序无关紧要。见[这个答案](http://stackoverflow.com/questions/4967656/what-is-the-default-value-for-enum-variable/4967673#4967673)。 – BoltClock 2011-03-25 00:13:41

+0

你是完全正确的,我忘了补充一点。但是数值很少被使用。 – 2011-03-25 00:14:37

+0

是的,这是真的...... – BoltClock 2011-03-25 00:15:08