命名空间和使用指令

时间:2009-07-20 22:01:08

标签: c# namespaces using-directives

如果我有一个名称空间:

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

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

如果是,这不是一个管理上的头痛吗?

6 个答案:

答案 0 :(得分:11)

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

如果将using语句放在命名空间之外,则无论命名空间如何,它都将应用于整个文件。

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

答案 1 :(得分:2)

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

Reference

  

using指令的范围是   限于它所在的文件   出现。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

一方面注意:您正在做一个非常好的做法,将using语句放在命名空间中。这是非常好的语法。

保持良好的工作。

答案 4 :(得分:0)

using语句对于它们出现的代码文件有效,但有一点小小的变化;如果将命令放在命名空间中,则它们仅限于该命名空间的范围,但仍然只在同一代码文件中。

答案 5 :(得分:0)

使用仅适用于当前文件。无论它们是在命名空间声明的内部还是外部,都只会产生很小的差异:

类型的查找顺序如下:

  1. 从最里面的命名空间声明开始
  2. 查看当前的命名空间
  3. 查看当前命名空间的使用情况
  4. 转到父命名空间声明并从步骤2重复
  5. 结果,这个程序编译得很好:

    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不存在)。