因为我不熟悉隐式打字;你能否告诉我两者之间的主要区别:
var foo = new Love();
AND
object foo = new Love();
答案 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的任何方法/属性,但你可以将它转换回来。