c# - 没有 'using someNamespace' 的 var 关键字

标签 c# using var

即使您没有在顶部包含必要的 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/

相关文章:

c# - 从 C# 获取 CPU ID 代码到 C++

c# - 如何识别仍然引用对象实例的位置?

c++ - 使用递归的组合函数C++

c++ - 引用依赖类型名

import - 在 Julia 中创建共享模块的推荐方法是什么?

Javascript 在数学运算后返回 NaN 值

php - match() 函数和匹配变量

c# - 如何以编程方式禁用 C# 控制台应用程序快速编辑模式?

node.js - module.exports 在变量声明中使用时会做什么

c# - 什么是 c# 类 StreamContent?