给定以下层次结构:
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
的模板限制。
A
中的Foo
没有声明为virtual
,是吗? - Sergey Kalinichenko