2009-06-19 4 views
1

Activator.CreateInstanceの結果をインターフェイスの型にキャストするときに、varキーワードの使用について私が作業するところにはいくつか質問があります。私はVARを理解すると、次のスニペットのペアはかなり同じVaRのバージョンと明示的な型バージョン間で、次のとおりです。varキーワードとActivator.CreateInstance?

// Direct cast 
var thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); 
IThing thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); 

// Casting with as 
var thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing; 
IThing thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing; 

は、私はそれがインテリセンスや実行時の動作を変更する場合があります欠けているいずれかの微妙な違いがありますか?

+0

あなたの最後の文は、あなたには、いくつかの違いを見ている意味 - あなたはより具体的なことができますか? (または私はあまりにもそれを読んでいますか?) – ChrisF

+0

*私は違いは見ませんが、同僚とvarのメリットを議論していました。私たちはどちらも確信が持てませんでした。 –

答えて

0

varとIThingは同一です。あなたは3回のキーストロークを保存するだけです。

2

違いはありません。 'var'というキーワードは魔法のようなものではありません。コンパイル時の型推論を使用しています。

コンパイルしても違いはありません。 IDEでこれを証明するには、使用されている変数名(宣言されている場所以外)にカーソルを移動します。タイプを示すツールチップがポップアップ表示されます。両方の変数は、ホバートしたときに同じタイプでなければなりません。

+1

ILを比較することは、誰もが納得できないままであれば、さらに証明になります。 – AakashM

+0

ILが優れた証拠になりますが、ILに入ることを望まない場合は、IDEが良い選択肢です。 –

1

それぞれの場合、varまたはIThingというものは同義語です。

キャストとasを使用すると違いがあります。後者は、アイテムが変換しようとしているものでない場合はnullを返します。

1

いいえ違いはありません。また、varキーワードを使用しても問題はありません。読みやすさの面では

、次のコード行を見て、あなたは簡単に確認魔女Typevarです:

var thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); 
var thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing; 
+0

合意。それが全面的な議論であった。私はvarが読みやすいと思ったが、同僚はそれがもっと難しいと思った。しかし、2行目では明示的な型が保証されていると思います。なぜなら、キャストされている型が、それほど遠くにあるので、何らかの検索が必要なためです。 –

関連する問題