当前位置:  开发笔记 > 编程语言 > 正文

C#名称空间别名 - 有什么意义?

如何解决《C#名称空间别名-有什么意义?》经验,为你挑选了6个好方法。

我一直在努力学习更多关于C#语言的知识,但是我还没有看到一个人会使用命名空间别名的情况.

 using someOtherName =  System.Timers.Timer;

在我看来,它只会增加对理解语言的困惑.有人可以解释一下.

谢谢



1> Marc Gravell..:

这是一个类型别名,而不是命名空间别名; 消除歧义很有用 - 例如,反对:

using WinformTimer = System.Windows.Forms.Timer;
using ThreadingTimer = System.Threading.Timer;

(ps:感谢选择Timer;-p)

否则,如果您同时使用System.Windows.Forms.Timer,并System.Timers.Timer在同一文件中,你不得不继续给的全名(因为Timer可能会造成混淆).

它还与extern别名一起使用,以便在不同的程序集中使用具有相同完全限定类型名称的类型 - 很少见,但是很有用.


实际上,我可以看到另一个用途:当你想快速访问一个类型,但不想使用常规using因为你不能导入一些冲突的扩展方法...有点复杂,但是......这是一个例子...

namespace RealCode {
    //using Foo; // can't use this - it breaks DoSomething
    using Handy = Foo.Handy;
    using Bar;
    static class Program {
        static void Main() {
            Handy h = new Handy(); // prove available
            string test = "abc";            
            test.DoSomething(); // prove available
        }
    }
}
namespace Foo {
    static class TypeOne {
        public static void DoSomething(this string value) { }
    }
    class Handy {}
}
namespace Bar {
    static class TypeTwo {
        public static void DoSomething(this string value) { }
    }
}


它可以用于命名空间名称或类型名称.

2> BenAlabaster..:

当我有多个具有冲突的子命名空间和/或对象名称的命名空间时,我可以使用它,你可以像[作为一个例子]做一些事情:

using src = Namespace1.Subspace.DataAccessObjects;
using dst = Namespace2.Subspace.DataAccessObjects;

...

src.DataObject source = new src.DataObject();
dst.DataObject destination = new dst.DataObject();

否则必须写入:

Namespace1.Subspace.DataAccessObjects.DataObject source = 
  new Namespace1.Subspace.DataAccessObjects.DataObject();

Namespace2.Subspace.DataAccessObjects.DataObject dstination = 
  new Namespace2.Subspace.DataAccessObjects.DataObject();

它节省了大量的打字,可以用来使代码更容易阅读.



3> Joel Mueller..:

除了上面提到的示例之外,在重复引用泛型类型时,类型别名(而不是命名空间别名)可以很方便:

Dictionary foo = new Dictionary();

private void DoStuff(Dictionary dict) {}

与:

using FooDict = Dictionary;

FooDict foo = new FooDict();

private void DoStuff(FooDict dict) {}



4> annakata..:

简洁.

在共享类型名称的命名空间之间提供清晰度有一些附加好处,但实质上它只是糖.



5> bdukes..:

我总是在这样的情况下使用它

using Utility = MyBaseNamespace.MySubNamsepace.Utility;

其中,Utility否则将有一个不同的环境(如MyBaseNamespace.MySubNamespace.MySubSubNamespace.Utility),但我希望/喜欢Utility总是指向一个特定的类.



6> Sean Bright..:

当您在多个包含的命名空间中有多个具有相同名称的类时,这将非常有用。例如...

namespace Something.From.SomeCompanyA {
    public class Foo {
        /* ... */
    }
}

namespace CompanyB.Makes.ThisOne {
    public class Foo {
        /* ... */
    }
}

您可以使用别名使编译器满意,并使您和团队中的其他人更清楚:

using CompanyA = Something.From.CompanyA;
using CompanyB = CompanyB.Makes.ThisOne;

/* ... */

CompanyA.Foo f = new CompanyA.Foo();
CompanyB.Foo x = new CompanyB.Foo();

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有