我一直在跑步风格警察一些Cusing
指令应该位于命名空间内。
是否有技术原因将using
指令位于命名空间内部而不是外部?
答案
两者之间实际上存在(微妙的)差异。
// File1.cs
using System;
namespace Outer.Inner
{
class Foo
{
static void Bar()
{
double d = Math.PI;
}
}
}
现在假设有人将另一个文件 (File2.cs) 添加到项目中,如下所示:
// File2.cs
namespace Outer
{
class Math
{
}
}
编译器搜索Outer
在看那些之前using
命名空间之外的指令,因此它发现Outer.Math
代替System.Math
。Outer.Math
没有PI
成员,因此 File1 现在已损坏。
如果您将using
在您的名称空间声明中,如下所示:
// File1b.cs
namespace Outer.Inner
{
using System;
class Foo
{
static void Bar()
{
double d = Math.PI;
}
}
}
现在编译器搜索System
搜索之前Outer
, 发现System.Math
,一切都很好。
有些人会认为Math
对于用户定义的类来说可能是一个坏名字,因为已经有一个System
;是差异,它会影响代码的可维护性。
注意到如果发生什么也很有趣Foo
位于命名空间中Outer
, 而不是Outer.Inner
。Outer.Math
在 File2 中,无论在何处,都会破坏 File1using
去。using
指示。