继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

在C#的namespace内使用using语句

陪伴而非守候
关注TA
已关注
手记 219
粉丝 61
获赞 284

正如这篇讨论提到的, Should ‘using’ statements be inside or outside the namespace ,在公司使用的 StyleCop 经常会提示,建议将 using 语句放在 namespace 内部。原本的讨论中已经讲得听清楚了,这里做个小结。

举例,在代码片段 File1.cs 中,我们在 Outer.Inner 这个命名空间内声明了一个类 Foo,其中有一个静态函数 Bar() 会用到 Math 这个全局变量。

// File1.csusing System;namespace Outer.Inner{
    class Foo
    {
        static void Bar()
        {
            double d = Math.PI;
        }
    }}

加入现在有第二个代码片段 File2.cs,在 Outer 这个命名空间内声明了一个类 Math。

// File2.csnamespace Outer{
    class Math
    {
    }}

于是,在 Foo.Bar() 中,当执行到 Math 时,系统会首先到命名空间 Outer 中去寻找 Math 的定义,其次才是去命名空间外的 System 中去寻找。由于我们已经在 Outer 中定义了 Math, Foo.Bar() 会直接调用 Outer.Math 而不是 System.Math ,而 Outer.Math 并没有成员 PI,因此 File1 会报错。所以,当我们把 File1 中的 using 语句放到命名空间内之后,程序则一切正常。

// File1b.csnamespace Outer.Inner{
    using System;
    class Foo
    {
        static void Bar()
        {
            double d = Math.PI;
        }
    }}

注意

如果我们的 File1 是这样子,即 Foo 跟 File2 中的 Math 同在命名空间 Outer 内,这个时候 Foo.Bar() 会直接使用 Outer.Math,而不是 System.Math,不管 using 是放在命名空间内还是外。

// File1b.csnamespace Outer{
    using System;
    class Foo
    {
        static void Bar()
        {
            double d = Math.PI;
        }
    }}

这也说明了一点, 程序总总是先看自己同一命名空间中的定义,其次再看同一命名空间中的 using 语句 ,如果都没找到再去外层命名空间中按照同样的顺序查找。

正如这篇讨论提到的, Should ‘using’ statements be inside or outside the namespace ,在公司使用的 StyleCop 经常会提示,建议将 using 语句放在 namespace 内部。原本的讨论中已经讲得听清楚了,这里做个小结。

原文链接:http://outofmemory.cn/csharp/use-using-in-namespace

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP