今日、仮想として宣言されていないインターフェイスメソッドの実装をオーバーライドしようとして問題が発生しました。
この場合、インターフェイスまたは基本実装を変更できず、別のことを試す必要がありますが、仮想メソッドを使用してクラスにインターフェイスを実装させる方法があるかどうか疑問に思いました。
例:
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;
}
}
編集: MEFで使用することを目的としているため、MEFが正しいタイプを解決するためにCustomBuilder
派生しています。SimpleBuilder
インターフェイスを明示的に実装しようとしましたが、まったく派生しSimpleBuilder
ていませんが、MEFは正しいタイプを選択しません。
問題のインターフェースと基本クラスは別の開発者によって作成された共有モジュールにあるため、とにかく基本クラスを変更する必要があるようです。