两者之间实际上存在(细微)差异。假设您在File1.cs中具有以下代码:
// File1.csusing System;namespace Outer.Inner{ class Foo { static void Bar() { double d = Math.PI; } }}现在,假设有人将另一个文件(File2.cs)添加到项目中,如下所示:
// File2.csnamespace Outer{ class Math { }}编译器
Outer在查看
using命名空间之外的那些指令之前会进行搜索,因此它将查找
Outer.Math而不是
System.Math。不幸的是(或者幸运的是?),
Outer.Math没有
PI成员,因此File1现在已损坏。
如果将
using名称空间声明放入内部,则情况会发生变化,如下所示:
// File1b.csnamespace Outer.Inner{ using System; class Foo { static void Bar() { double d = Math.PI; } }}现在,编译器
System先进行搜索
Outer,然后进行搜索,查找
System.Math,然后一切正常。
有人会说这
Math对于用户定义的类来说可能是个坏名字,因为已经有in了
System;这里要说的就是这样存在 的
差异,并且它会影响您的代码的可维护性。
还要注意如果
Foo在命名空间
Outer中而不是中会发生什么
Outer.Inner。在这种情况下,
Outer.Math无论
using走到哪里,添加File2都会破坏File1
。这意味着编译器在查看任何
using指令之前会搜索最里面的命名空间。



