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

发布于 2024-09-10 11:23:42 字数 836 浏览 3 评论 0 原文

如果两个程序集都定义了包含类 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) 但如果 program P 也定义了 type B.A1 >,那么当我声明 A1 的实例时,编译器不会抱怨:

using A;

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

    class A1 { }
}

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

谢谢

If two assemblies both define namespace A containing class A1, then the two classes are considered unique types.

a) Are the two namespaces also considered unique?

b) If program P has a reference to both assemblies, how do we create an instances of the two types? Namely, I keep getting an error when I try to create an instance of A.A1

using A;

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

c) But if program P also defines type B.A1, then compiler doesn’t complain when I declare an instance of A1:

using A;

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

    class A1 { }
}

Shouldn’t compiler complain, since it can’t know which version of A1 to use ( A.A1 from one of the referenced assemblies or B.A1 )?

thanx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱殇璃 2024-09-17 11:23:42

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

这是更好的解释

You can resolve this with the extern alias directive.

And here is a better explanation.

夏见 2024-09-17 11:23:42

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

Referencing two assemblies having the same namespaces and same members within those namespaces is a complete no-no (i.e. don't do it!). I you have control over one or other of the assemblies, ensure that the root namespaces are different for the two and then you can disambiguate references to members within the assembly/namespace hierarchy.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文