【发布时间】:2011-02-28 01:13:19
【问题描述】:
我正在查看一个代码库,其中作者(我尊重的作者)始终将 using 语句放置在命名空间内,而不是在命名空间之上。这样做有什么好处(更高效的 GC?)还是这只是代码风格偏好?
干杯,
浆果
【问题讨论】:
标签: c# using-statement
我正在查看一个代码库,其中作者(我尊重的作者)始终将 using 语句放置在命名空间内,而不是在命名空间之上。这样做有什么好处(更高效的 GC?)还是这只是代码风格偏好?
干杯,
浆果
【问题讨论】:
标签: c# using-statement
Scott Hanselman 在 2008 年 7 月做了一个 post about this。我不知道这是否随着 .NET 4 框架而改变,但它基本上归结为一个偏好问题,除非你将你的类命名为与现有的类以及单个文件中的多个命名空间。
【讨论】:
这是 MS 推荐练习。 stylecop等程序推荐。
查看Is sa1200 All using directives must be placed inside the namespace (StyleCop) purely cosmetic? 进行更深入的讨论
【讨论】:
这是一种偏好,但在某些情况下,当您在内部和外部使用语句时存在语义差异。
using Bar;
namespace Foo
{
using Bar;
namespace Bar
{
class C
{
}
}
namespace Baz
{
class D
{
C c = new C();
}
}
}
namespace Bar
{
class E
{
}
}
在此,外部 using 语句引用命名空间 Foo 之后的命名空间 Bar。内部 using 语句指的是 Foo 内部的 Bar。如果 Foo 内部没有 Bar,那么内部也将引用外部 Bar。
编辑 正如 Jonathan 指出的那样,内部 using 可以更改为 `using global::Bar;" 以引用 out Bar 命名空间,这会破坏此特定代码,因为D 尝试使用 C。
【讨论】:
不要在没有使用“global::”的情况下将它们放入内部,否则您的代码会变得脆弱。
namspace bar {
using foo //this may mean "using global::bar.foo OR using global::foo"
}
参考
http://blogs.msdn.com/b/ericlippert/archive/2007/06/25/inside-or-outside.aspx?wa=wsignin1.0
【讨论】:
如果您在同一个文件中有多个命名空间,那么您将仅将 usings 范围限定为包含命名空间,而不是整个文件中的所有命名空间。
另见(刚刚发现这个很好的解释)Should 'using' statements be inside or outside the namespace?
【讨论】: