なぜ、enumをUInt16から外すことができないのですか?

以下のコードを与えられます:

static void Main()
{
    Console.WriteLine(typeof(MyEnum).BaseType.FullName);
}

enum MyEnum : ushort
{
    One = 1,
    Two = 2
}

これはSystem.Enumを出力します。つまり、コロンは継承とは何の関係もなく、単にenumの基本型を指定しています。

しかし、次のようにコードを変更した場合:

enum MyEnum : UInt16
{
    One = 1,
    Two = 2
}

私はコンパイルエラーが発生します。どうして? UInt16 ushort は同じですか?

13
誰か(OPではない)がこの投稿を編集し、最後の質問を「UInt16とintは同じですか?」から変更しました。あなたは、OPが実際に何を求めているのではないと確信していますか?
追加された 著者 Bradley Uffner,
@BradleyUffner:2つのコードスニペットが ushort System.UInt16 を使用していることを考慮すると、
追加された 著者 Ben Voigt,
それにもかかわらず、興味深い観察がこれを試して考えていないだろう。
追加された 著者 Marc L.,
@ブラッドリー・ユッフナー私は間違いをした。私は "UInt16ではないと同じですか?"と尋ねる予定でした。
追加された 著者 ojlovecd,
@CodeCanvasありがとう。以前に聞いたのと同じような質問があったことに気づいたはずです。
追加された 著者 ojlovecd,

5 答え

列挙型が基底型を継承していると報告していないということは間違いありません。 Enum.GetUnderlyingType ]を使用すると、 代わりに

ushort System.UInt16 で指定された型はまったく同じです。

ただし、 enum の構文では型は呼び出されません。代わりに、基本的なタイプを制御する限られたキーワードセットの1つを要求します。 System.UInt16 は有効な基本型ですが、C#文法でその場所に表示することを許可するキーワードの1つではありません。

引用文文法

列挙宣言

     
    enum修飾子 emum-body ; ; /strong> opt

  
     

enum-base

     
    

整数型

  
     

整数型

     
    

sbyte

         

バイト

         

short

         

ushort

         

int

         

uint

         

long

         

ulong

         

char

  
11
追加された

列挙型の有効な型は、( char を除く)整数型として明示的に指定されているためです。

列挙型の承認タイプは、byte、sbyte、short、ushort、int、uint、long、またはulongです。

http://msdn.microsoft.com/en-us/library/sbbt4032.aspx

UInt16 が組み込み型のドキュメントの ushort と同等であると期待する

C#タイプのキーワードとそのエイリアスは同じ意味です。たとえば、次のいずれかの宣言を使用して整数変数を宣言できます。

http://hdc.co.jp

編集:私はいくつかの答えは正確に正しい答えを把握していないこの答えでぶち壊されていた。 @BenVoightは正しいです。 System.UInt16 ushort とまったく同じ型ですが、それは( char 以外の) 文法で指定された整数型識別子(単なる構造体型)です。

5
追加された
いいえ、それは、文法で型識別子が表示されないためです。許可される制作はインテグラルタイプのみで、その選択肢はキーワードです。
追加された 著者 Ben Voigt,
ありがとう、私はそこに自分自身を矛盾していることを知っていた:/編集/クレジットは、どこに支払う。
追加された 著者 Kevin Stricker,

それはコンパイラエラーCS1008 です。かなり答えが得られます。列挙型の承認されたタイプ

列挙型の承認タイプは、byte、sbyte、short、ushort、int、   uint、long、またはulong。

3
追加された

The first part of your question is answered by others, but no one has addressed the 2nd part yet. Someone other than the OP has since edited the 2nd question, my answer may no longer apply

UInt16 and UInt are not the same, UInt16 is an unsigned 16 bit integer, UInt is an unsigned 32 bit integer. They vary quite a bit in their maximum value.

完全性のために、私はその答えを含めています。最初の質問も:

列挙型の承認済みタイプは、byte、sbyte、short、ushort、int、uint、long、またはulongです。

1
追加された

なぜですか?

私の推測はCLS準拠です。

1
追加された