当两个引用的程序集都定义类型A.A1时遇到问题

时间:2010-07-17 19:15:51

标签: c# assemblies namespaces

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

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)?

感谢名单

2 个答案:

答案 0 :(得分:5)

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

这是一个better explanation

答案 1 :(得分:1)

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