我目前正在使用另一个.net库的c#项目。该库(除其他外)将序列解析为树。所有项都是从抽象类Sequence
继承的某种类型。我需要稍微改变行为并将自己子类化为Sequence
(让我们称之为MySequence
)。树创建后,我可以用我自己类的对象替换一些树节点。
现在,已发布新版本的库,并引入了具有以下签名的Copy
函数:
internal abstract Sequence Copy();
我尝试将我的代码用于新版本并覆盖它,但无论我做什么,我都会遇到两个错误:
MySequence
未实现继承的抽象成员“Sequence.Copy()
” 和:
MySequence.Copy()
':找不到合适的方法来覆盖
这是有道理的,因为它是抽象的( - >它必须被覆盖)和内部的( - >它不能被覆盖,因为从组件外部隐藏的可见性)
所以,问题是,我理解为什么会这样,但不知道该怎么办。对我的项目来说,将Sequence
子类化是至关重要的。
我还不明白的是,为什么首先允许internal abstract
修改器,因为它基本上允许从程序集外部对整个类进行任何子类化??
有什么方法可以解决这个问题吗?通过反思或其他什么?
提前致谢!
答案 0 :(得分:4)
此修饰符表示该类只能在定义它的程序集中继承。
没有办法解决这个问题。
答案 1 :(得分:3)
基本上,如果不改变库,你就不走运了。可能有一个Sequence的子类确实实现了Copy,你可以在新版本中派生它。但是很可能在库的其他部分需要Copy方法来创建克隆。
答案 2 :(得分:1)
如果某个库的类型具有带修饰符internal abstract
的成员,我得出结论,该库的开发人员不希望任何人从该类型派生自己的类型。你无法解决这个问题。
您可以考虑是否故意这样做。你应该询问出版商。这可能是一个错误,在这种情况下,发布者可能会发布修复程序。如果故意这样做,你应该提出一个替代解决方案,而不是从那种类型。 编辑:或许他们打算只从已经实现该成员的同一程序集中的派生类型派生。