繁体   English   中英

关于Enums的简单问题

[英]simple question about Enums

internal enum eCoinType 
{
    g = 0,
    h = 1,
    s = 2
}

我在相同的代码中看到过这一行:

eCoinType coin = new eCoinType();  

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

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

请注意,虽然使用了关键字new ,但您仍然可以创建值类型的项,因为枚举是值类型,而不是引用类型。 它与使用new创建struct实例类似。

只是为了添加@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;

这是一种不好的态度。 我有程序员使用这个默认构造函数来枚举,它基本上分配了枚举的第一个值,而程序员实际上需要枚举的第一个值。 请注意,有些人在现有枚举中添加值而不关心顺序,如果将新值放在顶部,则会在代码编写的代码中得到未定义的行为。

eCoinType cointype = new eCoinType();

在这种情况下等于

eCoinType cointype = eCoinType.g;

但是如果你修改eCoinType并在g之前添加一些东西,你就改变了应用程序逻辑。

Mybe有一个用例(通过使用在不同的插件模块中声明的枚举修改应用程序逻辑?)但是这与Visual Basic中的Shadows overloading关键字一样多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM