【问题标题】:Namespace and class have the same name命名空间和类具有相同的名称
【发布时间】:2017-12-01 11:04:13
【问题描述】:

我继承了一个大型 c# 项目。其中一个类具有名称空间和类,它们共享相同的名称。因此,在创建类的实例时,我必须这样做:

using xxx.existingName
IinterfaceName dog = new existingName.existingName();

由于现有类有一个接口,我可以避免在= 的左侧出现existingName.existingName。使用var dog 也可以做到这一点。但是我也想避免在右侧使用existingName.existingName,因为它的可读性较差。

有没有办法在不重命名现有代码的情况下做到这一点?

【问题讨论】:

  • using dog = existingName::existingName;?

标签: c# class namespaces


【解决方案1】:

您可以通过using 指令重命名类或命名空间:

using ClassAlias = Test.Test;
using NamespaceAlias = Test;

public class Program
{
    public static void Main()
    {
        ClassAlias a = new ClassAlias();
        NamespaceAlias.Test t = new NamespaceAlias.Test();
    }
}

namespace Test{
    public class Test{}
}

【讨论】:

    【解决方案2】:

    您可以使用alias 来使其更具可读性(嗯,不要使用这些名称):

    using AliasForName = existingName;
    

    ...

    IinterfaceName dog = new AliasForName.existingName();
    

    如果原作者查看this MSDN article,他会首先使用不同的名称:

    X 不要对命名空间和其中的类型使用相同的名称 命名空间 。例如,不要使用 Debug 作为命名空间名称,然后 还在同一命名空间中提供一个名为 Debug 的类。一些 编译器要求这些类型是完全限定的。

    顺便说一句,你真的应该申请capitaliation conventions

    【讨论】:

    • 如果我们遵循这些约定,他们一开始就不会出现这种情况,因为命名空间命名约定说不要对命名空间和类型使用相同的名称。跨度>
    • @Damien_The_Unbeliever:添加
    猜你喜欢
    • 2016-01-04
    • 2012-02-27
    • 2011-12-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多