在两个.NET程序集中使用相同名称和命名空间的类型

12

出于好奇心,我创建了两个程序集,它们都有一个带有完全相同名称空间(Library1)的类(Class1)。 然后,我创建了另一个客户端引用这两个程序集,并尝试创建 Class1 的实例。

编译器很自然地给了我一个关于模糊引用的编译错误。是否有任何方法可以明确指定要使用的程序集中的类型以避免歧义?

注意:我知道在实践中几乎从不发生这种情况。 这只是关于语言特性的好奇问题。

2个回答

10

我认为您应该使用extern alias来包装Global命名空间之外的程序集名称空间。以下是具体步骤:

  1. 在引用这2个程序集的项目中,选择其中一个程序集并在“引用”下的“属性”窗口中将别名(Aliases)的值从global改为例如global,Library1a

  2. 对于另一个引用,同样地更改别名,但给它一个不同的别名,例如我们采用global,Library1b

  3. 在消费这些程序集的任何类的开头加入 extern alias Library1a; 和/或 extern alias Library1b;

  4. 访问模糊成员时,请使用 Library1a.Library1b. 来限定命名空间。例如: Library1a.Library1.Class1...Library1b.Library1.Class1...


1

在实际编程中,有时外部别名无法解决问题。这是其中一个例子重复名称空间


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