var foo = new Love();有什么区别? AND object foo = new Love();?

时间:2010-09-01 08:40:14

标签: c# .net variables c#-3.0 implicit-typing

因为我不熟悉隐式打字;你能否告诉我两者之间的主要区别:

 var foo = new Love(); 

AND

object foo = new Love();

4 个答案:

答案 0 :(得分:16)

在第一种情况下,foo的类型为Love。在第二种情况下,它是object

答案 1 :(得分:11)

var foo = new Love(); 

此处,变量foo静态类型为Love。这相当于写Love foo = new Love();

object foo = new Love();

此处,变量foo静态类型为object。如果不首先使用演员表,你就无法访问任何Love的方法。

foo动态类型(或运行时类型)在两种情况下均为Love,这就是为什么GetType会两者都返回Love

答案 2 :(得分:6)

使用var,compile 根据赋值运算符右侧的表达式推断变量的类型。

换句话说,

var foo = new Love();

完全等同于

Love foo = new Love();

因此,Love的所有成员都可以通过foo获取 - 而如果foo被声明为object类型,则您只能访问{ {1}},GetHashCode()ToString()GetType()

使用Equals(),您仍在使用静态类型(而不是在C#4中使用var)。你只是没有明确说明变量的类型 - 你让编译器为你工作。但是,它确实需要是编译器可以解决的类型。例如,这些都是无效的:

dynamic

在这些情况下,编译器没有足够的信息来确定您的意思。

答案 3 :(得分:2)

var foo = new Love();

这里等于

Love foo = new Love();

有时我们可以使用var来避免长课程名称,例如Dictionary<string,Dictionary<int,string>>.您可以使用Love类的所有方法/属性。

object foo = new Love();

现在foo被认为是一个对象,你看不到类Love的任何方法/属性,但你可以将它转换回来。