C# 当两个引用的程序集都定义类型A.A1时出现问题

C# 当两个引用的程序集都定义类型A.A1时出现问题,c#,assemblies,namespaces,C#,Assemblies,Namespaces,如果两个程序集都定义了包含类A1的命名空间A,则这两个类被视为唯一类型 a) 这两个名称空间是否也被认为是唯一的 b) 如果program p引用了这两个程序集,我们如何创建这两种类型的实例?也就是说,当我试图创建A.A1 using A; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { A1 a = new

如果两个程序集都定义了包含
类A1
命名空间A
,则这两个类被视为唯一类型

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

b) 如果
program p
引用了这两个程序集,我们如何创建这两种类型的实例?也就是说,当我试图创建
A.A1

using A;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A1 a = new A1(); // error
        }
  }
}
c) 但如果
程序p
也定义了
类型B.A1
,那么当我声明
A1
的实例时,编译器不会抱怨:

using A;

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

    class A1 { }
}
编译器不应该抱怨,因为它不知道使用哪个版本的
A1
A.A1
来自引用的程序集或
B.A1


thanx

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

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

这是一个例子