C#中的对象和var差异

objectvar什么区别?

  • var – 未明确指定类型。 让编译器弄清楚那种类型是什么。
    • 类型在设计时固定,不能引用其他类型的对象。
    • 正如Pauli在评论中指出的那样,你获得了intelliSense
    • 必须初始化。 var i; 不会编译。
    • 不能用作方法的返回类型。
    • 必须是局部变量。 不是领域或财产。
    • 适用于Anonymous Types 。 你获得了intelliSense
  • objectSystem.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。