タイプを特定のタイプにvar a = 7;
設定するのはなぜですか(つまり、ではなく)?C#コンパイラによってオンザフライで行われるルール/デフォルト/チェックはありますか?a
int
byte
7 に答える
「オンザフライ」の意味は明確ではありませんが、C#コンパイラは仕様に定められたルールに従うだけです。種類の宣言の場合:
var a = expression;
のタイプa
はのタイプですexpression
。式7
はタイプですがint
、の範囲内の定数であることが知られているため、byte
次のことが可能になります。
byte a = 7;
コンパイルする。ただし、への変換を使用しても式の型は変更されないため、C #コンパイラは。の型に使用します。byte
7
int
a
var
このような定数には使用しないことをお勧めします。int
、などの境界の周りでかなり混乱する可能性のあるコードで終わりuint
、匿名型を支援し、コードをより読みやすくすることも目的としています。コードが読みにくくなる場合は、使用しないでください。long
var
コンパイラは、サフィックスを持たないコード内の整数リテラルを。として扱いますint
。
したがって、この:
byte myByte = 255;
..実際には、int
定数255を1バイトに暗黙的に変換しています。
これが、var
が整数であると推測される理由です。コンパイラはデフォルトで整数リテラルを使用するためです。
これを行う場合:
var a = 7L;
Aはタイプlong
です。
デフォルトがあります、私はあなたにそれらのすべてを手元に伝えることができませんでした。5/7を呼び出す場合と同様に、デフォルトで整数除算になります。ただし、5 / 7.0を実行すると、通常の除算が実行されます。varは、割り当てられた値のタイプにタイプを設定するだけです。キャストがない場合、デフォルトでは整数になります。
var
「実行時に型を判別する」という意味ではなく、「代入演算子の右側にある式の結果型を使用して型を判別する」という意味です。コンパイル時に決定されます。
varキーワードは、コンパイラが変換できる型に指定値を自動的に設定します。例:var s = ""; 文字列を含み、文字列になります。
varは一般的な型であり、CLRが必要なメモリ管理を処理するため、式の型を決定し、変数をその型にするため、aを式の型に設定します。