これ:
const int a = 5;
正常にコンパイルされますが、
const var a = 5;
しない...ながら:
var a = 5;
これと同じようにコンパイルします:
int a = 5;
なぜ?
これ:
const int a = 5;
正常にコンパイルされますが、
const var a = 5;
しない...ながら:
var a = 5;
これと同じようにコンパイルします:
int a = 5;
なぜ?
このvar
キーワードは、定数にすることのできない長い複雑な型名を記述しないようにすることを目的としています。
次のような宣言を記述できると非常に便利です。
var dict = new Dictionary<string, List<Definition>>();
匿名タイプを使用する場合に必要になります。
定数の場合、これは問題ではありません。
定数リテラルを持つ最長の組み込み型名はdecimal
;です。それはあまり長い名前ではありません。
定数として使用できる任意の長さのenum
名前を付けることは可能ですが、C#コンパイラチームは明らかにそれを気にしませんでした。
一つには、一定のenum
値を作成している場合は、それをに入れた方がよいでしょうenum
。
また、enum
名前は長すぎてはいけません。(複雑なジェネリック型とは異なり、頻繁に行う必要があります)
これはコンパイラの制限であり、その制限の理由はここでEricLippertによって示されています。
varのない定数:
const int Value1 = 1;
const int Value2 = 2;
varを持つ定数(匿名タイプのプロパティ値は作成後に変更できません):
var constants = new {
Value1 = 1,
Value2 = 2,
};
//use as constants.Value1
定数は組み込みの数値型またはstring
である必要があるため、実際にはあまり節約できません。const int
はと同じ長さconst var
であり、int
おそらく最も一般的なタイプの定数です。それから、double
実際にはそれほど長くはないものがあります。入力するものがたくさんある場合は、Alt選択機能を使用してください;-)