2011-06-01 66 views
18

我想声明一个新的枚举与非默认的基础类型。这工作:为什么枚举声明接受短但不是Int16

public enum MyEnum : short 
{ A, B, C, } 

但我不明白为什么这个不能编译的原因:

public enum MyEnum : System.Int16 
{ A, B, C, } 

编译器说

类型字节,为sbyte,短,USHORT,INT , uint,long or ulong expected

据我所知,是Int16在所有.NET版本(包括32/64位风格)上的别名。我不明白为什么编译器给这个特殊情况下的别名赋予不同的含义。

任何解释?

+0

我记得有一个类似的问题越来越关闭昨天 – V4Vendetta 2011-06-01 09:57:31

+0

我发现两个使用谷歌几乎相同的问题:http://stackoverflow.com/questions/3774650/enum-members-of-int32-type和http://stackoverflow.com/questions/1813408/c-int-int32 -and-枚举。 – 2011-06-01 10:00:01

+0

尽管花了几分钟的时间阅读搜索结果,但我没有找到它:) – 2011-06-01 10:00:32

回答

17

语法无误。 C#规范明确指出,枚举的基础类型必须是byte,sbyte,,int,uint,longulong

阅读微软对此说的here

+1

+1你的链接指向一个更简洁的解释:) – Gishu 2011-06-01 10:02:49

+0

链接已损坏。请修复 – Dmitry 2013-04-26 17:36:16

+0

@Dmitry链接被微软杀死 - 当我发布它时它就起作用。我现在修复了它,但是如果每次破坏都不修复它。 – 2013-04-28 11:59:18

2

“......第二个例子是试图从从System.ValueType,这是严格禁止的派生的类继承......”

阅读here

+0

很多讨论的东西看起来像一个小东西:) – Gishu 2011-06-01 09:59:02

+0

eheheh!...我同意! ;) – danyolgiax 2011-06-01 10:01:07