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)
Hei*_*nzi 11
var foo = new Love();
Run Code Online (Sandbox Code Playgroud)
这里,静态类型的变量foo是Love.这相当于写作Love foo = new Love();.
object foo = new Love();
Run Code Online (Sandbox Code Playgroud)
这里,静态类型的变量foo是object.如果不先使用演员表,你就无法访问任何Love的方法.
该动态类型(或运行时类型)的foo是Love在这两种情况下,这也是为什么GetType会返回Love两种.
使用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)
在这些情况下,编译器没有足够的信息来确定您的意思.