とを使用Action
しFunc<T>
てメソッドをラップし、クロージャを使用して引数を渡すことができます。
public TResult CallMethod<TResult>(Func<ThirdPartyClass, TResult> func)
{
try
{
return func(this.wrappedObject);
}
catch(ThirdPartyException e)
{
// Handle
}
}
public void CallMethod(Action<ThirdPartyClass> method)
{
this.CallMethod(() => { method(this.WrappedObject); return 0; });
}
次に、これを次の方法で使用できます。
var result = wrapper.CallMethod(thirdParty => thirdParty.Foo(bar, baz));
編集:上記は、サードパーティライブラリのインスタンスをラップしていることを前提としています。(コメントから)これらが静的メソッドであるとすると、次のように使用できます。
public static TResult CallMethod<TResult>(Func<TResult> func)
{
try
{
return func();
}
catch(ThirdPartyException e)
{
// Handle
}
}
public static void CallMethod(Action method)
{
CallMethod(() => { method(); return 0; });
}
そして、次の方法で電話します。
var result = Wrapper.CallMethod(() => ThirdParty.Foo(bar, baz));