C#中的对象和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在编译时确定。
例如:
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
你可以看到对象项应该装箱,var项不需要装箱。
对象和var的 MSDN
-
你也可以这样做:
object i; i = 2;
但你做不到:
var i; i = 2;
你会得到编译错误。
- 对象是.Net中的所有内容都inheritance自的类型,所以你可以为任何类型的y做对象x = y,因为inheritance,但var是隐式类型定义的关键字,例如var i = 2表示int i = 2。