C# - using语句的位置

时间:2009-08-27 18:11:21

标签: c# scope using-statement

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

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

using System;

namespace MyNamespace
{
    using System.Text;

    public class MyClass {
        // ...
    }
}

ASP.NET MVC source

是整个项目中看似不必要的一个例子。{{3}}。

3 个答案:

答案 0 :(得分:13)

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

这两种技术都运行良好。

  

StyleCop规则说:   放置多个名称空间元素   在单个文件中通常是一个   坏主意,但是如果是的话   完成后,放置所有内容是个好主意   在每个中使用指令   命名空间元素,而不是   全局位于文件顶部。这个   将严格限定名称空间,并且   也有助于避免那种   上述行为。

     

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

编辑,我的头脑羞愧

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

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

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

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


iDesign C# coding standard是一个可靠的标准(或从中衍生出来)。它建议将using语句保留在命名空间之外作为第14项。但这完全归功于贵公司/项目的惯例