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

时间:2011-06-07 13:50:47

标签: c# .net override visibility

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

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

internal abstract Sequence Copy();

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

  

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

这是有道理的,因为它是抽象的( - >它必须被覆盖)和内部的( - >它不能被覆盖,因为从组件外部隐藏的可见性)

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

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

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

提前致谢!

3 个答案:

答案 0 :(得分:4)

此修饰符表示该类只能在定义它的程序集中继承。

没有办法解决这个问题。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

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