即使您没有在顶部包含必要的 using
声明,Visual Studio/intellisense 如何知道如何处理声明为 var
的变量?
例如,我在不同的命名空间中定义了类 MyDomainObject
如果我不在文件中声明 using TheOtherNameSpace;
,则以下代码将无法编译:
private void Foo()
{
MyDomainObject myObj = new MyDomainObject();
// Doesn't know what this class is
}
但是如果我使用 var
var myObj = new MyDomainObject();
这将编译,并且智能感知确切地知道我可以用它做什么。
那么,如果不使用 using
,它怎么知道类型是什么?
(顺便说一句,如果它知道不用 using
,那我们为什么还需要 using
?!)
最佳答案
您的带有构造函数的示例将不起作用,但稍微复杂一些的情况会起作用。例如,假设您有三种类型:
- 命名空间 N1 中的类 Foo
- 命名空间 N2 中的类 Bar
- 命名空间 N3 中的 Baz 类
现在假设 Bar
有一个返回 Foo
实例的方法:
public static Foo GetFoo() { ... }
在这里,Bar.cs 需要 N1 的 using 指令,除非它指定了完整的名称。
现在假设我们在 Baz 中有这段代码:
using N2;
...
var foo = Bar.GetFoo();
那会编译,但是
using N2;
...
Foo foo = Bar.GetFoo();
不会。原因是 using 指令只是为了让编译器知道名称“Foo”的含义 - 它的完全限定名称是什么。在第一个片段中,Bar.GetFoo()
被有效地声明为返回 N1.Foo
,因此编译器没有问题。在第二个片段中,编译器首先看到“Foo”并且对 N1 一无所知,因此不知道如何查找它。
关于c# - 没有 'using someNamespace' 的 var 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2789321/