有一件事我注意到很多来回的问题是将使用语句放在C#代码文件中 - 无论是在最外层还是在命名空间内。我理解using语句的位置会影响该文件中引用的范围,但我不明白的是,在大多数情况下,有人会希望在其命名空间中使用它们的using语句。
在几乎所有情况下在一个文件中只存在一个命名空间声明,因此使用using语句的范围似乎/(是?)无效。如果一个人在同一个文件中放置了多个类型和多个命名空间,那么使用语句进行范围化就很有意义了,但即使在具有一个命名空间的文件中,我仍然会看到很多这种情况。为什么呢?
using System;
namespace MyNamespace
{
using System.Text;
public class MyClass {
// ...
}
}
是整个项目中看似不必要的一个例子。{{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项。但这完全归功于贵公司/项目的惯例