10

次の階層があるとします。

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

4

4 に答える 4