5

型推論はvarキーワードを利用します。コンパイラは、変数が初期化される対象によって、変数の型が何であるかを「干渉」します。
例:var somenum = o; int somenum=0になります。

somenumがとして宣言されることはありませんが、コンパイラーはこれを理解intし、somenumはintスコープ内にある限りforです。

variantで使用されているタイプのようなものvisual basicです。プログラムで使用すると、パフォーマンスがある程度低下varし、3.5より前のドットネットフレームワークには含まれません。

パフォーマンスが低下し、ドットネットフレームワークが強力な型チェックをサポートしている場合でもvar、フレームワーク3.5に含まれているのはなぜですか?

スミレはvar強い型チェックですか?そうでない場合はどうですか?

4

5 に答える 5

6

varパフォーマンスをまったく低下させません。変数はまだ強く型付けされています:

暗黙的に型指定されたローカル変数は、自分で型を宣言したかのように厳密に型指定されますが、型はコンパイラによって決定されます。

唯一の違いは、ソース コードで型を手動でスペルアウトする必要がないことです。Variantそれがあなたが言及しているものであれば、VB 6とはまったく関係がありません。

于 2012-11-15T14:44:16.660 に答える
4

それはまったく好きVariantではなく、パフォーマンスを低下させません。

.NET では、var は省略形のメカニズムとしてコンパイラによって提供されます。コンパイルされたコードは、正しい型を宣言したかのように厳密に型指定されます。

于 2012-11-15T14:45:36.170 に答える
1

varパフォーマンスを低下させず、依然として強く型付けされています。

LINQ は「匿名型」を返すことができるため、LINQ に必要だったために導入されました。
コンパイラによって生成される型の名前を制御できないため、これがこのキーワードを導入する主な理由でした。追加の値は、変数を宣言するときに変数の型を複製しないための構文シュガーとして使用できることです。

var = new List<MyComplexType<WithTypeParameter>>();

それ以外の:

List<MyComplexType<WithTypeParameter>> x = new List<MyComplexType<WithTypeParameter>>();

例えば。

var は、Visual Basic の Variant データ型のようなものではありません。var キーワードで宣言 (および初期化) された変数に特定のインスタンスを割り当てる場合、その変数に別の型のインスタンスを割り当てることはできません。その次に、「var」変数を初期化せずに宣言することはできません。

于 2012-11-15T14:47:07.337 に答える
1

何?いいえ、あなたはこれをすべて間違っています。

C#はVB のようなものvarではなくVariantdynamicC# にあります (多かれ少なかれ)。

varは、プログラムをコンパイルするときにコンパイラが入力する単なるプレースホルダーです。実行時に実際の型が完全に宣言されて使用されるため、パフォーマンスの低下はまったくありません。

// this won't work
var i=0;
i="a"; // it would with dynamic though!
于 2012-11-15T14:46:00.210 に答える
1

var はいくつかの理由で役立ちます。コードの冗長性を軽減するだけでなく、変数に割り当てられているメソッドの出力で型が変更されたときにリファクタリングを容易にします。それでも使用法を満たしている場合、変更は不要です。

また、どちらの方法でも同じになるILにコンパイルされるため、パフォーマンスへの影響はありません。

于 2012-11-15T14:46:42.423 に答える