今天我遇到了一个问题,试图覆盖一个没有被声明为虚拟的接口方法的实现。
在这种情况下,我无法更改接口或基本实现,必须尝试其他方法,但我想知道是否有办法强制类使用虚拟方法实现接口。
例子:
interface IBuilder<T>
{
// Already implicitly virtual
/*virtual*/ T Build();
}
// This is a class written by someone else
class SimpleBuilder: IBuilder<SomeObject>
{
// I would like to force this to be virtual
public SomeObject Build() { return new SomeObject(); }
}
// This is the class I am writing.
class CustomBuilder: SimpleBuilder
{
public /*override*/ SomeObject Build()
{
var obj = base.Build();
obj.ModifyInSomeWay();
return obj;
}
}
编辑:CustomBuilder
旨在与 MEF 一起使用,因此我是从中派生的SimpleBuilder
,以便 MEF 解析正确的类型。我已经尝试显式地实现接口并且根本不派生,SimpleBuilder
但是 MEF 没有选择正确的类型。
有问题的接口和基类位于另一个开发人员创建的共享模块中,所以看起来我无论如何都必须让他们改变他们的基类。