C# – using语句的位置

我注意到很多东西来回的一件事是将使用语句放在C#代码文件中 – 无论是在最外层还是在命名空间内。 我理解using语句的位置会影响该文件中引用的范围,但我不明白的是,在大多数情况下,有人会希望在其命名空间中使用它们的using语句。

几乎所有情况下 ,单个文件中只存在一个命名空间声明,因此使用using语句的范围似乎/(是?)无用。 如果一个人在同一个文件中放置了多个类型和多个命名空间,那么使用语句进行范围化非常有意义,但即使在具有一个命名空间的文件中,我仍然会看到大量的这种情况。 为什么?

using System; namespace MyNamespace { using System.Text; public class MyClass { // ... } } 

在整个项目中,看似不必要的一个例子是ASP.NET MVC源代码 。

将“使用”放在文件的顶部是Visual Studio的默认方式。 但是,建议的方法是在命名空间中放置“using”语句。 甚至MS的stylecop也抓住了这个,并说VS的默认方式是错误的。

这两种技术都很好。

StyleCop规则说:在单个文件中放置多个名称空间元素通常是一个坏主意,但是如果这样做,最好将所有using指令放在每个名称空间元素中,而不是全局放在顶部。文件。 这将严格限定命名空间的范围,并且还有助于避免上述类型的行为。

重要的是要注意,当使用位于命名空间之外的using指令编​​写代码时,在命名空间中移动这些指令时应小心,以确保这不会改变代码的语义。 如上所述,在namespace元素中放置using-alias指令允许编译器以指令放置在命名空间之外时不会发生的方式在冲突类型之间进行选择。

以下是一些进一步审核的链接:

在我开始使用StyleCop之前,我从未见过/听说过这种做法,并且会被规则SA1200标记,我现在只是禁用它。 奇怪的是Visual Studio作为新项目的一部分创建的.cs文件违反了这个规则,它将using指令放在文件名的最开头,在命名空间之外。

编辑,我的头羞愧

啊! 您引用的using语句用于导入命名空间,而不是包装IDisposable对象!

非常不同,含糊不清的条款……你让我感到困惑:-)

我个人喜欢它们在文件顶部的命名空间之外; 但这可能是由于我在C#和VB.NET之间切换。

我喜欢将我的项目组织成每个文件1个文件,没有内部(嵌套)类,每个命名空间只有一个类( 每个文件 )。 在这种情况下,无论是在命名空间的内部还是外部, using语句的位置都无关紧要。


iDesign C#编码标准是一个可靠的标准(或从中衍生出来)。 它建议将名称空间外的using语句保留为第14项。 但这完全取决于您的公司/项目的惯例