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

时间:2015-05-08 06:26:03

标签: c# class inheritance namespaces .net-assembly

我设法在2个课程中练习,但是我在3个课程中失败了。 让我们说我有一个程序集A.DLL,它有命名空间=" City"和一个班级=" NY"

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

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

所以实现B:A(B继承/扩展自A) 我为参考A.DLL创建了一个alies 并且在" B" class refere with" extern alias oldDll"

namespace City
{
    extern alias oldDll;

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

这很好用! :)

问题是当我尝试在另一个程序集中使用新的assebmly(B.DLL /" B"类)而只引用B.DLL时(我会在我的问题中引用这个类) as" C")并创建一个新的" City.NY" 我得到一个例外,我认为这是因为" A.DLL"没有加载。

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

所以我有一个班级" C"创造了一个班级" B"它继承自" A"

我想到了manualy load" A.DLL"装配在" B"代码,但首先发生的是base()构造函数..:\

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

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

我认为不会在没有丢失程序集的情况下进行编译。

答案 1 :(得分:1)

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

static B()
{
}

请注意,类型构造函数不允许使用访问修饰符。但无论哪种方式,我想基础类型甚至在此之前就被加载了,所以你在这里没有机会。

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

答案 2 :(得分:1)

你不能。

简单地说 - 让B.dll中的City.NY级继承自A.dll中的B.dll是一个重大改变,需要重新编译依赖$solvation = "<html>".$_POST['solvation']; 的程序集}。