これを行う「クリーンでシンプルな」方法がわかりません。
私が思い付くことができる最良のオプションは、ジェネリックとメソッドWrapper<T>をカプセル化し、インスタンス化しTて実装するジェネリックを作成することです。PrecallPostcall
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です。