次の階層があるとします。
class A
{
}
class B : A
{
public void Foo() { }
}
class C : A
{
public void Foo() { }
}
これはサードパーティのライブラリであり、変更できません。コンストラクター引数として渡された適切なオブジェクトに Foo() メソッドを転送する、ある種の「汎用テンプレート ラッパー」を作成する方法はありますか? 私はジェネリックを使用せず、かなり醜いように見える次のように書きました。
class Wrapper
{
A a;
public Wrapper(A a)
{
this.a = a;
}
public void Foo()
{
if (a is B) { (a as B).Foo(); }
if (a is C) { (a as C).Foo(); }
}
}
のようなテンプレート制約が欲しいですWrapper<T> where T : B or C
。