2

因为我不熟悉隐式类型;你能告诉我之间的主要区别:

 var foo = new Love(); 

object foo = new Love();
4

4 回答 4

16

在第一种情况下,类型fooLove。在第二种情况下是object

于 2010-09-01T08:41:30.927 回答
11
var foo = new Love(); 

这里,变量的静态foo类型是Love。相当于写Love foo = new Love();

object foo = new Love();

这里,变量的静态foo类型是object。如果不先使用演员表,您将无法访问 Love 的任何方法。

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

于 2010-09-01T08:41:52.533 回答
6

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

换句话说,

var foo = new Love();

完全等同

Love foo = new Love();

所以所有的成员Love都可以通过foo- 而如果foo被声明为 type ,object你只能访问GetHashCode(),ToString()和.GetType()Equals()

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

// All invalid
var a = null;
var b = delegate() { Console.WriteLine("Hello"); };
var c = x => Console.WriteLine("lambda: " + x);
var d = MethodName; // Attempted method group conversion

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

于 2010-09-01T08:42:54.590 回答
2
var foo = new Love();

这里等于

Love foo = new Love();

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

object foo = new Love();

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

于 2010-09-01T08:45:03.040 回答