Учитывая следующую иерархию:
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
.