私の問題を視覚化するために、ここに小さな写真があります:
ここには 2 つのアセンブリがあります。どちらも難読化されています。ベースは私たちによって書かれ、難読化されています。特別なものは別の人 A によって書かれ、難読化されています。A には私たちの情報源がなく、私たちにも彼の情報源がありません。全体的なアイデアは、 A が のすべての関数を拡張できるようにしたいということBaseAssembly
です。は、BaseInterfaceAssembly
. 彼は、基本実装が呼び出される前に何かをBaseClass
追加して実行することで、私たちを拡張したいと考えています。内部で難読化されています。methodB()
methodA()
BaseClass
ここで、デコレータの出番です。A にオブジェクトのデコレータを作成させることができBaseInterface
ます。methodA()
このためには、 A をオーバーライドして追加するだけでよい抽象デコレータ ベースを作成する必要がありますmethodB()
。彼にとっては違いはありません。私たちにとっては、すべてのインターフェースに対してこれらの抽象デコレーターを作成して維持する必要があります。これは望ましくないオーバーヘッドです。
最初の質問は、両側にオーバーヘッドがない代替手段はありますか?オブジェクトの作成後にパフォーマンスの問題が発生しない場合、何らかのハックも受け入れますか?
2 番目の質問は、代替手段がない場合、存在するすべてのインターフェイスの 1 つの抽象デコレータを記述し、将来存在する方法はありますか?
編集
リクエストされたサンプルコード:
public interface BaseInterface
{
void MethodA();
}
internal class BaseClass : BaseInterface
{
public virtual void MethodA()
{
//do something
}
}
internal class SpecialClass : BaseClass
{
public override void MethodA()
{
//do something before
base.MethodA();
}
public void MethodB()
{
//do something
}
}
よろしく、ユグドラシル