【发布时间】:2011-05-28 02:28:14
【问题描述】:
object 和 var 有什么区别?
【问题讨论】:
object 和 var 有什么区别?
【问题讨论】:
var - 没有明确指定类型。让编译器弄清楚该类型是什么。
Pauli 在评论中指出的那样,您会得到intelliSense。var i; 不会编译。Anonymous Types 配合得很好。你会收到intelliSense。object - System.Object.intelliSense。var i = 0; // i is of type `System.Int32`. Same as "int i = 0;"
i = "Some String"; // Compile time error.
object o = 0;
o = "Some String"; // Works
【讨论】:
例如:
var i = 2;
object j = 2;
然后你在 ildasm 中查看它:
IL_0000: nop
IL_0001: ldc.i4.2
IL_0002: stloc.0
IL_0003: ldc.i4.2
IL_0004: box [mscorlib]System.Int32
IL_0009: stloc.1
您可以看到 object item 应该被装箱,而 var item 不需要装箱。
你也可以这样做:
object i;
i = 2;
但你不能这样做:
var i;
i = 2;
你会得到编译错误。
【讨论】:
object,i的静态类型是int。在这种特殊情况下,object j 会将 2 隐式“提升”为一个对象(所有对象都是“引用类型”),但想象一下真正相同的语句:var i = (object)2; object j = 2。在这种情况下,运行时类型和信息是相同的。更准确地说,在:var s = ""; object s2 = ""; 中,对象类型相同——区别在于编译时/静态类型。