重写另一个程序集中的内部抽象方法

本文关键字:内部 抽象方法 集中 程序集 另一个 程序 重写 | 更新日期: 2023-09-27 17:58:30

我目前正在处理一个使用另一个.net库的c#项目。这个库(除其他外)将序列解析为树。所有项都是从抽象类Sequence继承的某种类型。我需要稍微改变行为,并自己将Sequence子类化(我们称之为MySequence)。树创建后,我可以用自己类的对象替换一些树节点。

现在,该库的新版本发布了,并引入了具有以下签名的Copy函数:

internal abstract Sequence Copy();

我试图将我的代码应用到新版本并覆盖它,但无论我在做什么,我都会遇到两个错误:

MySequence不实现继承的抽象成员"Sequence.Copy()"
和:
MySequence.Copy()':未找到覆盖的合适方法

这是有意义的,因为它是抽象的(-->必须重写)和内部的(-->由于程序集外部的隐藏可见性,它不能重写)

所以,问题是,我理解为什么会发生这种情况,但不知道该怎么办。对我的项目来说,将Sequence子类化是至关重要的。

我也不明白的是,为什么internal abstract modfier一开始就被允许,因为它基本上允许从程序集之外对整个类进行任何子类化!?

有什么办法解决这个问题吗?通过反射还是什么?

提前感谢!

重写另一个程序集中的内部抽象方法

基本上,如果不更改库,您将失去运气。Sequence可能有一个子类确实实现了Copy,您可以在新版本中从中派生。但是,在库的其他部分可能需要Copy方法来创建克隆。

这个修饰符意味着类只能在定义它的程序集中继承。

这是没有办法的。

如果一个库有一个成员带有修饰符internal abstract的类型,我得出结论,该库的开发人员不希望任何人从该类型派生自己的类型。你无法解决这个问题。

你可以考虑一下这是否是故意的。你应该问问出版商。这可能是一个错误,在这种情况下,出版商可能会发布一个修复程序。如果是故意这样做的,您应该在不从该类型派生的情况下想出一个替代解决方案。EDIT:或者它们可能只用于从已经实现该成员的同一程序集中的派生类型派生。