【问题标题】:Having problems when two of referenced assemblies both define type A.A1当两个引用的程序集都定义类型 A.A1 时出现问题
【发布时间】:2011-03-17 10:03:54
【问题描述】:

如果两个程序集都定义了包含class A1namespace A,则这两个类被视为唯一类型。

a) 这两个命名空间是否也被认为是唯一的?

b) 如果program P 引用了这两个程序集,我们如何创建这两种类型的实例?即,当我尝试创建 A.A1 的实例时,我不断收到错误消息

using A;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A1 a = new A1(); // error
        }
  }
}

c) 但是如果program P 也定义了type B.A1,那么当我声明A1 的实例时编译器不会报错:

using A;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A1 a = new A1(); // ok
        }
    }

    class A1 { }
}

编译器不应该抱怨,因为它不知道要使用哪个版本的A1A.A1 来自一个引用的程序集或B.A1)?

感谢

【问题讨论】:

    标签: c# assemblies namespaces


    【解决方案1】:

    您可以使用extern alias 指令解决此问题。

    这是better explanation

    【讨论】:

      【解决方案2】:

      在这些命名空间中引用具有相同命名空间和相同成员的两个程序集是完全禁止的(即不要这样做!)。如果您可以控制其中一个或其他程序集,请确保两者的根命名空间不同,然后您可以消除对程序集/命名空间层次结构中成员的引用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多