C# 继承具有相同命名空间和相同类名的类

C# 继承具有相同命名空间和相同类名的类,c#,class,inheritance,namespaces,.net-assembly,C#,Class,Inheritance,Namespaces,.net Assembly,我在两节课上都能解决这个问题,但我在三节课上失败了。 假设我有一个程序集A.DLL,它有namespace=“City”和class=“NY” (我将在问题中把这门课称为“A”) 在我的新项目中,我的名称空间是=“City”,我有一个class=“NY”(在我的问题中,我将把这个类称为“B”) 所以要实现B:A(B从A继承/扩展) 我创建了一个引用A.DLL的alies 在“B”类中,使用“外部别名oldDll”引用 这个很好用!:) 问题是,当我试图在另一个程序集中使用新的assebmly(B

我在两节课上都能解决这个问题,但我在三节课上失败了。 假设我有一个程序集A.DLL,它有namespace=“City”和class=“NY”

(我将在问题中把这门课称为“A”)

在我的新项目中,我的名称空间是=“City”,我有一个class=“NY”(在我的问题中,我将把这个类称为“B”)

所以要实现B:A(B从A继承/扩展) 我创建了一个引用A.DLL的alies 在“B”类中,使用“外部别名oldDll”引用

这个很好用!:)

问题是,当我试图在另一个程序集中使用新的assebmly(B.DLL/“B”类)时,它只引用了B.DLL(我将在问题中把这个类称为“C”),并创建一个新的intance“City.NY” 我得到一个异常,我想这是因为“A.DLL”没有加载

如何从B加载它(如果这是问题的话)?我没有访问“C.EXE”或C代码的权限(他只是从B.DLL创建City.NY)。 *注意:我不能重新编译C。我只能运行它

所以我有一个类“C”,它创建了一个从“a”继承的类“B”

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


感谢您帮助纠正我的错误,因为我不是100%确定,但通常您必须引用这两个程序集才能使其正常工作(这就是某些软件包具有依赖关系的方式,也必须在project中下载和引用)


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

第一件事实际上不是基本构造函数,而是类型构造函数。您可以通过以下方式指定此选项:

static B()
{
}
请注意,类型构造函数上不允许使用访问修饰符。但不管怎样,我猜基本类型在这之前就已经加载了,所以这里没有机会了

此外,配置文件也没有帮助。他们可以重定向现有的引用(请参阅),但我认为他们不能添加以前没有的引用

你不能


简单地说-在
B.dll
中继承
A.dll中的
City.NY
City.NY
是一个突破性的更改,需要重新编译依赖于
B.dll
的程序集

C.dll可能是针对不需要a.dll的B.dll版本编译的,在这种情况下,您不会得到编译器错误。@Kamo我无法重新编译“C”,我只是运行“C.EXE”@Georg-sure,但作者说
,所以我有一个类“C”,它创建了一个从“a”继承的类“B”
-在这种情况下,我假设B引用了A.@Jumpy\u Goat-好的,但是你知道这个神秘的
A.dll是什么吗?为什么你不能重新编译你的C?如果您没有源代码,很难更改或修复它。@Kamo可能B的早期版本不是从a继承的,如果是这种情况,那么就不需要对a.dll的引用。这是个好问题,但您呈现它的方式使它比必要的更难理解。例如,1。与其用文本描述名称空间和类,为什么不用代码描述呢?(例如:“在A.dll中:
名称空间城市{class NY{…}}
”)2。为什么不将外部别名和类引用与其实际名称对齐?如果您有一个
a.dll
,为什么要将外部别名命名为
oldDll
?为什么不
A
?既然可以称之为
A::City.NY
,为什么要将
A.dll
City.NY
类称为“A”?那样的话,你的问题的读者就不必那么费神了@斯塔克斯:谢谢,我下次会记得的:)重新编译不会有帮助的。。。你需要重新编译添加对另一个DLL的引用,对吗?在重新编译其他程序集时,它们需要有对.DLL的引用,否则会导致编译器错误。我90%确定你可以通过动态加载和反射来完成这项工作,但代码可能会出错。
static B()
{
}