C#では、キーワードはどのように機能しvarますか?
C#では、キーワードはどのように機能しvarますか?
回答:
これは、宣言されているローカルのタイプがコンパイラーによって推論されることを意味します。
// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";
特に、var変数を動的型として定義しません。したがって、これは合法ではありません。
var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints
var 用途は2つだけです。
var foo = new { Bar = "bar" };var地元住民以外のタイプとしては使えません。したがって、キーワードvarを使用してフィールド/プロパティ/パラメーター/戻り値の型を宣言することはできません。
var foo = new Foo();と同じですFoo foo = new Foo();。つまり、スーパータイプではなく、参照、またはオブジェクトへの参照を任意のサブタイプにfoo含めることができます。FooFoo Foo
これは、データ型がコンテキストから派生(暗黙)されていることを意味します。
http://msdn.microsoft.com/en-us/library/bb383973.aspxから
Visual C#3.0以降、メソッドスコープで宣言された変数は、暗黙の型varを持つことができます。暗黙的に型付けされたローカル変数は、自分で型を宣言したかのように強く型付けされますが、コンパイラーが型を決定します。次の2つのiの宣言は機能的に同等です。
var i = 10; // implicitly typed
int i = 10; //explicitly typed
var キーボードのタイピングや視覚的なノイズを取り除くのに役立ちます。
MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();
なる
var x = new MyReallyReallyLongClassName();
しかし、読みやすさが犠牲になるほど使い過ぎることがあります。
初期化で割り当てられたものに基づいて型を宣言します。
簡単な例は、次のコードです。
var i = 53;
53のタイプを調べ、基本的にこれを次のように書き換えます。
int i = 53;
ただし、次のことが可能です。
long i = 53;
これはvarでは起こりません。それでできること:
var i = 53l; // i is now a long
同様に:
var i = null; // not allowed as type can't be inferred.
var j = (string) null; // allowed as the expression (string) null has both type and value.
これは、複雑な型の場合はあまり便利ではありません。匿名型ではより重要です:
var i = from x in SomeSource where x.Name.Length > 3 select new {x.ID, x.Name};
foreach(var j in i)
Console.WriteLine(j.ID.ToString() + ":" + j.Name);
ここでは、それらが保持するタイプの名前がないため、定義iおよびj使用以外の方法はありませんvar。
int i = 100;// explicitly typed
var j = 100; // implicitly typed
varはC#の「コンテキストキーワード」です。つまり、変数を使用しているのと同じクラスのコンテキストで暗黙的にローカル変数としてのみ使用できます。「メイン」または他の外部クラス、またはインターフェイスなどから呼び出すクラスでそれを使用しようとすると、エラーCS0825 < https://docs.microsoft.com/en-us/dotnet/が発生します。 csharp /その他/ cs0825 >
使用できる場合と使用できない場合の説明については、こちらのドキュメントをご覧ください。< https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed -local-variables#remarks >
基本的に、 "var myValue =" This is the value "などの暗黙の値を持つ変数を宣言する場合にのみこれを使用する必要があります。これにより、たとえば" string "を指定する場合と比べて少し時間が節約できますが、IMHOはそれほど時間はかかりません保存し、プロジェクトのスケーラビリティに制約を課します。
var foo = new Foo()、fooタイプFooまたはそのスーパークラスのいずれかである可能性があります。それはどのようにして合法なのでしょうか?