0

varの使用キーワードについて本当に混乱しましたC#。これによりコードが読みやすくなること
はわかっていますが、速度とメモリはどうでしょうか。var

A.

  1. var a = 100;
  2. int b = 100;
  3. int c; c = 100;

B.

  1. var listA = new List<obj>();
  2. List<obj>listB = new List<obj>();
  3. List<obj>listC; listC = new List<obj>();

どちらが速いですか?
型依存性はありますか?
状況とそのメモリが割り当てられたときの両方で、どのくらいのメモリが割り当てられますか?

4

6 に答える 6

4

どちらが速いですか?

どちらでもない、彼らは同じです。

型依存性はありますか?

ここで何を尋ねているのかわかりませんが、コンパイルされた後はこれらのコード スニペットに違いはないので、いいえで行きます。

状況とそのメモリが割り当てられたときの両方で、どのくらいのメモリが割り当てられますか?

それはすべて同じです。このint例では、すべてのケースで 32 ビットです。このList例では、3 つすべてが参照用に 1 つの単語を割り当て、さらに実際のリスト インスタンス用のメモリを割り当てます。

于 2013-04-25T14:59:57.337 に答える
2

これは純粋にコンパイルステップ機能です。コンパイラは左側の式の型を推測し、それを変数の型として使用します。したがって、結果の IL は同じになります。

そう:

var list1 = new List<int>();
List<int> list2 = new List<int>();

完全に同一です。しかし、型を指定すると、次のような効果が得られる例をいくつか見ることができます。

var i1 = 5;
int i2 = 5;
//vs:
var i2 = 5;
object i2 = 5;

したがって、実際の式の型が宣言された変数の型とまったく同じである場合、それらは完全に同一です。ただしvar、式の型と変数の型が同じでない場合は異なる可能性があります。

于 2013-04-25T14:58:50.783 に答える
0

var右側のステートメントから返されるものから推測されます。これはコンパイラによって行われるため、実際にプログラムを実行すると違いはありません。

ただし、ステートメントが意図しない型を生成しても、コンパイラ エラーが発生しないことに注意してください。

于 2013-04-25T15:03:41.707 に答える