"using"指令应该在名称空间之内还是之外?

我已经在某些C#代码上运行了StyleCop,并且一直在报告我的using指令应该在名称空间中。

是否有技术上的理由将using指令放在名称空间的内部而不是外部?

解决:

两者之间实际上存在(细微)差异。假设您在File1.cs中具有以下代码:

// 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对于用户定义的类来说可能是个坏名字,因为已经有in了System;这里要说的就是这样存在的差异,并且它会影响您的代码的可维护性。 

还要注意如果Foo在命名空间Outer中而不是中会发生什么Outer.Inner。

在这种情况下,Outer.Math无论using走到哪里,添加File2都会破坏File1 。

这意味着编译器在查看任何using指令之前先搜索最里面的命名空间


欢迎分享,(木庄网络博客交流QQ群:562366239

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论