给定以下层次结构:
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
.