var与C#中的对象

可能重复:
C#中“var”和“object”之间的区别

我想知道var和object之间的区别。

何时使用Var以及何时使用Object。

使用它们的利弊。

var只是“让编译器为我选择正确的变量类型”的简写(编译时类型推断是更精确的术语)。

另一方面, object是一种特定的类型; 所有其他引用类型都派生自object ,因此您可以将任何内容分配给object类型的变量。

var是你发现自己问的答案,我真的必须输入两次长类型名称,例如:

 Dictionary>, IEnumerable>>> myDict = new Dictionary>, IEnumerable>>>(); 

为什么没有朋友,你没有。 使用var代替:

 var myDict = new Dictionary>, IEnumerable>>>(); 

现在myDict确实是一个Dictionary>, IEnumerable>>> ,所以你可以添加内容,枚举它等等。

如果您将其声明为object ,则无法使用Dictionary提供的任何操作,只能对所有对象有效。

var仍然是强类型的,但是对象你必须抛出一切。

 var foo = "Hello, I am a string!"; // foo is a string, so this compiles var fooCharArray = foo.ToCharArray(); object bar = foo; // bar is not a string, so this does not compile var barCharArray = bar.ToCharArray(); 

在第一个例子中,编译器知道foo是一个字符串,因此我们可以在foo上调用字符串方法。

在第二个例子中,我们将字符串foo “upcast”为一个对象。 现在编译器不知道(因为它不应该知道!) bar实际上是一个字符串,我们不能在bar上调用字符串方法。 编译器不允许从对象(或任何基类型)到派生类型(例如System.String )的隐式向下转换。 它是编译时类型安全规则的一部分。