在C#中使用命名空间别名有什么好处?

19

使用命名空间别名有什么好处?它只是用来简化编码的吗?

7个回答

11

我仅在类名冲突时使用命名空间别名。 对我来说,这并不是简单化的问题。 我的观点是:如果没有必要,就不要使用它。


7

正如其他人所说的那样,当你不得不同时导入多个命名空间时,它有助于消除类型的歧义。

这似乎与其他人的观点相悖,但它也可能有助于澄清两个域之间的范围:

using Gilco.Test.ProjectX;
using DevCode = Gilco.Nilfum.Alpha.ProjectX;

public class MyTests
{
    public void TestCase1()
    {
        var car = new DevCode.Car();
        var testCar = new TestCar();
    }
}

在罕见情况下,当您必须指定命名空间(以消除歧义)时,它也可能很有用。如果您的命名空间不太长,无法证明别名的必要性,但很可能很快会更改(例如,当您使用命名空间同时支持两个版本的代码路径时),这种情况也很有用:

using DevCode = Gilco.V1;

6

在存在冲突类型名称的情况下,使用别名可以避免您必须使用完全限定名称。例如,名称TextBox在以下两个命名空间中都被使用。

System.Windows.Forms.TextBox
System.Web.UI.WebControls.TextBox

依赖于using声明的顺序会比较脆弱,并且只能帮助其中一个命名空间。更好的方法是为每个命名空间分配一个别名。

谢谢Scott,非常好的解释,简短明了,点赞。 - Owais Qureshi

5

当你遇到冲突时,它们非常有用。例如,如果你有类型NamespaceA.JobberNamespaceB.Jobber,并且想在同一个类中同时使用它们,你不能只添加using语句来引入NamespaceA和NamespaceB,因为编译器无法确定你输入Jobber时指的是哪个命名空间。在这种情况下,你需要给其中一个或两个命名空间起别名。

这可以使你的代码更清晰,特别是当命名空间很长时,因为另一种选择是每次使用类型时都要写出整个命名空间。


1

命名空间别名在解决代码中两个或多个同名类的歧义时非常有用。例如,您在winform中有一个Button类,同时您的第三方库中也有一个Button类。当您的代码引用Button时,您可能希望将其限定为来自第三方,并且不想在每个地方都输入完整的长文本,而是使用别名using CompanyX = CompanyX.UI.Animated.Control ... CompanyX.Button

实际上,我在工作项目中早些时候也使用它使我的代码更易读。我使用Office Word自动化,而不是在各处定义变量Application并难以区分它与我的实际Application类,我定义了Word=Microsoft.Office.Interop.Word,在代码中我可以说Word.Application来引用Word应用程序对象


0

我通常只在使用两个同名类时才使用命名空间别名。


0
据我所知,当你创建命名空间别名时,每个别名的静态变量值都是自己的,不依赖于其他别名。加上简化版。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接