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

pen*_*ake 2 .net c# variables implicit-typing c#-3.0

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

 var foo = new Love(); 
Run Code Online (Sandbox Code Playgroud)

object foo = new Love();
Run Code Online (Sandbox Code Playgroud)

Bri*_*sen 16

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

  • 此外,请记住,真正的爱情不能被抽象为一个对象. (6认同)

Hei*_*nzi 11

var foo = new Love(); 
Run Code Online (Sandbox Code Playgroud)

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

object foo = new Love();
Run Code Online (Sandbox Code Playgroud)

这里,静态类型的变量fooobject.如果不先使用演员表,你就无法访问任何Love的方法.

动态类型(或运行时类型)的fooLove在这两种情况下,这也是为什么GetType会返回Love两种.


Jon*_*eet 6

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

换一种说法,

var foo = new Love();
Run Code Online (Sandbox Code Playgroud)

正好相当于

Love foo = new Love();
Run Code Online (Sandbox Code Playgroud)

因此所有成员Love将通过使用foo-而如果foo被宣布为类型的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
Run Code Online (Sandbox Code Playgroud)

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