继承具有相同命名空间和相同 class 名称的 class

Inherit a class with same namespace and same class name

我在 2 类 中设法解决了问题,但我在 3 中失败了。 假设我有一个程序集 A.DLL,它有 namespace = "City" 和 class= "NY"

(我将在我的问题中将此 class 称为 "A")

在我的新项目中,我的命名空间是 = "City",我有一个 class = "NY"(我将在我的问题中将此 class 称为 "B")

所以要实现 B : A(B Inherit/Extend 来自 A) 我为参考 A.DLL 创建了一个 alies 并在 "B" class 中引用 "extern alias oldDll"

namespace City
{
    extern alias oldDll;

    public class NY : oldDll::City.NY
    {
        public NY() : base()
        {
        }
    }
}

这很好用! :)

问题是当我尝试在另一个仅引用 B.DLL(我将在我的问题中将此 class 称为 "C") 并创建 "City.NY" 的新实例 我得到一个异常,我认为这是因为 "A.DLL" 没有加载。

如何从 B 加载它(如果这是问题所在)?我无法访问 "C.EXE" 或 C 代码(他只是从 B.DLL 创建 City.NY)。 *注意:我不能重新编译C。我只能运行它。

所以我有一个 class "C" 创建一个 class "B" 继承自 "A"

我想到了在 "B" 代码中手动加载 "A.DLL" 程序集,但首先发生的是 base() 构造函数.. :\

感谢您的帮助

请纠正我,因为我不是 100% 确定,但通常你必须引用两个程序集才能使其正常工作(这就是某些包具有依赖项的方式,也必须在项目中下载和引用)。

我认为如果不缺少汇编也不会编译。

首先发生的事情实际上不是基本构造函数而是类型构造函数。您可以使用以下内容指定它:

static B()
{
}

请注意,类型构造函数上不允许使用访问修饰符。但不管怎样,我想基本类型甚至在那之前就已经加载了,所以你在这里没有机会。

配置文件也无济于事。他们可以重定向现有的引用(参见 https://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs.110%29.aspx),但我认为他们不能添加以前不存在的引用。

你不能。

简单地说 - B.dll 中的 class City.NY 继承自 A.dll 中的 City.NY 是一项重大更改,需要重新编译程序集取决于 B.dll