10

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

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

using System;

namespace MyNamespace
{
    using System.Text;

    public class MyClass {
        // ...
    }
}

ASP.NET MVC 源代码就是在整个项目中看似不必要地完成此操作的一个示例。

4

3 回答 3

13

将“使用”放在文件顶部是 Visual Studio 的默认方式。但是,推荐的方法是将“使用”语句放在命名空间内。甚至 MS 的 stylecop 也发现了这一点,并说 VS 的默认方式是错误的。

两种技术都可以正常工作。

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

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

这里有一些链接供进一步审查:

于 2009-08-27T18:19:49.800 回答
3

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

于 2009-08-27T18:33:39.990 回答
0

编辑,我羞愧地低着头

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

非常不同,模棱两可的术语......你让我感到困惑:-)

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

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


iDesign C# 编码标准是一个可靠 的标准,可以遵循(或您自己的标准)。它建议将语句保留在命名空间之外,作为第 14 项。但这完全取决于您的公司/项目的约定using

于 2009-08-27T18:16:45.810 回答