给定一个类和命名空间,定义如下;
namespace Models
{
public class Foo
{
}
}
还有以下...
namespace Factories
{
using Models;
class FooFactory
{
public Foo GetFoo()
{
return new Foo();
}
}
}
最后...
namespace InferenceTest
{
using Factories;
class Program
{
static void Main()
{
Foo foo = new FooFactory().GetFoo();
}
}
}
如您所料,此代码无法编译,并显示错误“找不到类型或名称空间名称'Foo'(您是否缺少using指令或程序集引用?)”
但是,如果我将行更改为此...
var foo = new FooFactory().GetFoo();
然后,它将编译并运行正常。
为什么会有这种差异?关于类型推断的意义是什么,它使它能够查看尚未导入的名称空间中的类型。命名空间只是语法糖吗?
最佳答案
var foo = new FooFactory().GetFoo();
编译的原因很简单。编译器推断foo是Models.Foo类型,而不仅仅是Foo。
表示按下Models.Foo foo2 = new FooFactory().GetFoo();
。
请注意,Foo foo2 = new FooFactory().GetFoo();
是不同的。