我看不到这样做的“干净和简单”的方式。
我能想到的最好的选择是编写一个泛型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
andPostcall
方法不是泛型的,那么使用Wrapper<T>
类真的没有意义。随手去吧FooWrapper
。