internal enum eCoinType
{
g = 0,
h = 1,
s = 2
}
我在同一段代码中看到了这行:
eCoinType coin = new eCoinType();
这是什么意思?
在枚举中,“new”声明的作用是什么?谢谢。
internal enum eCoinType
{
g = 0,
h = 1,
s = 2
}
我在同一段代码中看到了这行:
eCoinType coin = new eCoinType();
这是什么意思?
在枚举中,“new”声明的作用是什么?谢谢。
它使用默认值0创建一个eCoinType
实例,该值对应于eCoinType.g
。默认构造函数是System.Enum
类的构造函数。
请注意,虽然使用了关键字new
,但您仍会创建值类型的项,因为枚举是值类型,而不是引用类型。这类似于使用new
创建结构实例。
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;
这是一种不好的态度。我曾经有程序员使用默认构造函数来创建枚举类型,这基本上会将枚举的第一个值赋值给它,而实际上程序员需要的是枚举类型的第一个值。请注意,有些人会向现有的枚举类型中添加值,而不关心顺序,如果他们将新值放在顶部,那么像这样编写的代码就会出现未定义的行为。
eCoinType cointype = new eCoinType();
在这种情况下等于
eCoinType cointype = eCoinType.g;
但是,如果您修改eCoinType并在g之前放置一些内容,则已更改应用程序逻辑。
也许有这样的用例(通过使用在不同插件模块中声明的枚举来修改应用程序逻辑?),但这与Visual Basic中的Shadows重载关键字一样晦涩难懂 :)
eCoinType coin = default(eCoinType)
。 - BoltClock