1

私の問題を視覚化するために、ここに小さな写真があります:

問題

ここには 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
    }
}

よろしく、ユグドラシル

4

0 に答える 0