3

暗黙的に型付けされた変数について読んでいたとき、この質問が頭に浮かびました。私はインターネットで答えを見つけることができなかったので、それをうさぎにすることにしました。

'var'キーワードを使用して変数を宣言するとします。

var i = 10;

コンパイル後、iは「整数」iとしてコンパイル/処理されます。

さて、私の質問は、「i」の値が「Short」データ型に収まるほど非常に小さいため、「i」が「short」にコンパイルされない理由です。そして、なぜそれは常に「整数」にコンパイルされるのですか?

4

1 に答える 1

6

C#仕様2.4.4.2では、数値リテラルに10進数または接尾辞がない場合は、、、、の最小値、intまたはそれを含めることができると規定されているためです。自然にフィットするので選ばれます。uintlongulong10Int32

整数リテラルのタイプは、次のように決定されます。

  • リテラルに接尾辞がない場合、その値を表すことができる最初のタイプ(int、uint、long、ulong)があります。

C#言語の設計者は、10に適合できるとしてもInt16、その変数タイプの使用は比較的まれであると判断しました。そのInt32使用法は「現状維持」になります。

実際、メモリが機能する場合、とにかくC#にはリテラルはありません。 Int16値を取得するには、明示的に宣言して値を割り当てる必要がありますInt16


興味深いことに、私はコンパイルされたILコードを見て、を宣言しshort s = 10int i = 10実際にまったく同じILを生成しました...それで、ショートパンツがどのように管理されているのか疑問に思います。とにかく、CLIでは実際には32ビット値として管理されている可能性があります。これが当てはまるかどうかを知りたいです。

于 2013-03-27T10:11:52.190 に答える