即使您没有在顶部包含必要的var
声明,Visual Studio / intellisense如何知道如何处理声明为using
的变量?
例如,我在不同的命名空间中定义了类MyDomainObject
如果我没有在文件中声明using TheOtherNameSpace;
,则以下代码将无法编译:
private void Foo()
{
MyDomainObject myObj = new MyDomainObject();
// Doesn't know what this class is
}
但是如果我使用var
var myObj = new MyDomainObject();
这将编译,intellisense确切知道我能用它做什么。
那么如果没有using
(另外,如果没有using
知道,为什么我们需要using
?)
答案 0 :(得分:6)
简短的回答是它没有。
您所看到的行为和差异必然存在其他原因。
您可以使用简短但完整的程序重现问题,以便将其发布到此处吗?
var
关键字没有任何神奇之处,它只是根据赋值右侧的表达式(在本例中)推断出所需的类型,因此没有理由为什么其中一个代码碎片应该比另一块更好。
答案 1 :(得分:6)
使用构造函数的示例将不起作用,但稍微更复杂的情况将会发生。例如,假设您有三种类型:
现在假设Bar
有一个返回Foo
实例的方法:
public static Foo GetFoo() { ... }
这里,Bar.cs需要一个N1的using指令,除非它指定了完整的名称。
现在假设我们在Baz中有这个代码:
using N2;
...
var foo = Bar.GetFoo();
那将编译,但
using N2;
...
Foo foo = Bar.GetFoo();
不会。原因是只使用指令,以便编译器知道名称“Foo”的含义 - 它的完全限定名称是什么。在第一个片段中,Bar.GetFoo()
被有效声明为返回N1.Foo
,因此编译器没问题。在第二个片段中,编译器首先看到“Foo”并且对N1一无所知,因此不知道如何查找它。
答案 2 :(得分:0)
它知道对象的完全限定类型,因为此类型位于其中一个引用的程序集中。
using SomeNamespace
只是一种速记,可以说MyType
而不是SomeNamespace.MyType
。