让我们想象一下:
// assembly 01
abstract class Foo
{
abstract void Bar();
}
class AdvancedFoo : Foo
{
override void Bar() { base.Foo(); ... }
}
sealed class SuperiorFoo : AdvancedFoo
{
override sealed void Bar() { base.Foo(); }
}
然后我想从我的 02 asm中引用该程序集 01 并替换中间基类(并且只有它),以便{{1}的实例他们的行为就像他们在集会 02 的SuperiorFoo
中一样。
AdvancedFoo
如果 02 程序集不重写// assembly 02
class AdvancedFoo : Foo
{
override void Bar() { base.Foo(); ... }
}
类声明,有没有办法做到这一点?
SuperiorFoo
答案 0 :(得分:2)
不是你不做的方式,但你可以使用组合而不是继承来解决你的问题:
interface IFoo
{
abstract void Bar();
}
class AdvancedFoo : IFoo
{
override void Bar() { base.Foo(); ... }
}
sealed class SuperiorFoo : IFoo
{
private IFoo _fooImplementer;
public SuperiorFoo()
{
_fooImplemnter = new AbstractFoo();
}
public SuperiorFoo(IFoo fooImplementer)
{
_fooImplementer = fooImplementer;
}
void Bar() { _fooImplementer.Foo(); }
}
要从第二个程序集调用,您将使用第二个构造函数,传递新的'advancedfoo'类的实例。
答案 1 :(得分:1)