我在一些C代码上运行了StyleCop,它不断报告我的using指令应该在名称空间中
使用指令将放在名称空间内部而不是外部是否有技术原因
两者之间实际上有(细微的)区别。假设您在File1.cs中有以下代码:
//File1.cs
使用制度;
命名空间外部。内部
{
福班
{
静态空心条()
{
双d=Math.PI;
}
}
}
现在,假设有人向项目中添加了另一个文件(File2.cs),如下所示:
//File2.cs
命名空间外部
{
课堂数学
{
}
}
编译器先搜索Outer,然后再使用命名空间外的指令查看这些,因此它会查找Outer.Math,而不是System.Math。不幸的是(或者幸运的是?),Outer.Math没有PI成员,所以File1现在被破坏了
如果将using放在命名空间声明中,则会发生如下变化:
//File1b.cs
命名空间外部。内部
{
使用制度;
福班
{
静态空心条()
{
双d=Math.PI;
}
}
}
现在,编译器在搜索外部之前搜索系统,找到系统.Math,一切正常
有些人会争辩说,对于用户定义的类来说,Math可能是个坏名字,因为在系统中已经有了一个;这里的要点是,存在差异,它会影响代码的可维护性
如果Foo位于名称空间Outer中,而不是Outer.Inner中,那么会发生什么,这也很有趣。在这种情况下,在File2中添加Outer.Math会中断File1,而不管使用的在哪里。这意味着编译器在使用指令查看任何之前先搜索最里面的封闭名称空间