6

如果我有一个像这样的命名空间:

namespace MyApp.Providers
 {
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Globalization;
  }

这是否意味着如果我创建具有相同命名空间的其他文件和类,则 using 语句是共享的,我不需要再次包含它们?

如果是的话,这不是有点让人头疼吗?

4

6 回答 6

11

不,它只对文件内的命名空间部分有用。不适用于命名空间内的所有文件。

如果将 using 语句放在命名空间之外,则它适用于整个文件,而与命名空间无关。

在进入外部范围之前,它还将首先搜索命名空间内的 Usings。

于 2009-07-20T22:04:28.713 回答
2

您需要在要使用它们的每个文件中为要引用的任何类指定 using 指令,而无需限定。

参考

using 指令的范围仅限于它出现的文件。

于 2009-07-20T22:05:53.813 回答
0

不,它没有,所以不,它不是。

考虑在namespace声明之外,您位于全局命名空间中。using源文件该区域中的语句会影响其他源文件中的全局命名空间吗?

于 2009-07-20T22:03:21.837 回答
0

不,您需要在每个类中包含命名空间,除了部分类。

附带说明:您将 using 语句放在命名空间中是一种非常好的做法。这是非常好的语法。

保持良好的工作。

于 2009-07-20T22:04:13.753 回答
0

using 语句对它们出现的代码文件有效,只是稍有不同;如果将 using 语句放在命名空间内,它们将被限制在该命名空间的范围内,但仍仅限于同一代码文件中。

于 2009-07-20T22:05:24.813 回答
0

Usings 仅适用于当前文件。无论它们是在命名空间声明的内部还是外部,都只有很小的区别:

类型的查找顺序如下:

  1. 从最里面的命名空间声明开始
  2. 查看当前命名空间
  3. 查看当前命名空间的使用
  4. 向上到父命名空间声明并从第 2 步开始重复

结果,这个程序将编译得很好:

namespace MyProject.Main {
    using System;

    class Program {
        public static void Main(string[] args) {
            Console.WriteLine("Hello, World!");
        }
    }
}

// in another file:
namespace MyProject.Console {
    class Test {}
}

但是如果将 移到using System;顶部,则编译将失败(MyProject.Console.WriteLine 不存在)。

于 2009-07-20T23:14:46.730 回答