覆盖另一个程序集中的内部抽象方法

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

现在,已发布新版本的库,并引入了具有以下签名的Copyfunction:

 internal abstract Sequence Copy(); 

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

MySequence没有实现inheritance的抽象成员’ Sequence.Copy()
和:
MySequence.Copy() ‘:找不到合适的方法来覆盖

这是有道理的,因为它是抽象的( – >必须被覆盖)和内部的( – >由于来自程序集外部的隐藏可见性,它不能被覆盖)

所以,问题是,我明白为什么会这样,但不知道该怎么办。 对我的项目来说,将Sequence子类化是至关重要的。

而我也不明白的是,为什么首先允许internal abstract修改器,因为它基本上允许从程序集外部对整个类进行任何子类化!

有什么方法可以解决这个问题吗? 通过反思或什么?

提前致谢!

基本上,如果不改变库,你就不走运了。 可能有一个Sequence的子类确实实现了Copy,你可以在新版本中派生它。 但很可能在库的其他部分需要Copy方法来创建克隆。

此修饰符意味着该类只能在定义它的程序集中inheritance。

没有办法解决这个问题。

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

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