メソッドをラップするのに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));
感謝。 WrappedObjectはどこから来たのですか?これは第三者クラスのインスタンスですか? 私はサードパーティのクラスが静的クラスであるという点で少し複雑ですが、静的でないクラスを作成してそのメソッドを公開することができます。 – bkr
@bkrこれは、あなたの "ラッパー"がオブジェクトのインスタンスをラップしていることを前提としていました。それがなければ、実際には簡単です - 私は編集して表示します –
@bkr代わりに静的を使って表示するように編集しました。 –