これを行う「クリーンでシンプルな」方法がわかりません。
私が思い付くことができる最良のオプションは、ジェネリックとメソッドWrapper<T>
をカプセル化し、インスタンス化しT
て実装するジェネリックを作成することです。Precall
Postcall
public class Wrapper<T>
{
protected T _instance;
public Wrapper(T instance)
{
this._instance = instance;
}
protected virtual void Precall()
{
// do something
}
protected virtual void Postcall()
{
// do something
}
}
独自FooWrapper
のインターフェースIFoo
(または他のインターフェース)を作成し、メソッド呼び出しを委譲することができるように:
public class FooWrapper :Wrapper<IFoo>, IFoo
{
public FooWrapper(IFoo foo)
: base(foo)
{
}
public int Bar()
{
base.Precall(); return base._instance.Bar(); base.Postcall();
}
public int Bar2()
{
base.Precall(); return base._instance.Bar2(); base.Postcall();
}
public void VBar()
{
base.Precall(); base._instance.VBar(); base.Postcall();
}
}
したがって、次のように使用できます。
IFoo f = new ActualFooClass();
IFoo wf = new FooWrapper(f);
f.Bar();
もちろん、メソッドPrecall
とメソッドがジェネリックでない場合、そのクラスPostcall
を使用しても意味がありません。Wrapper<T>
と一緒に行くだけFooWrapper
です。