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
,所以你可以添加内容,枚举它等等。
如果您将其声明为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
)的隐式向下转换。 它是编译时类型安全规则的一部分。