这基本上是一个设计问题。
我的班级结构如下:
Interface IA
interface IB<T> where T : IA
abstract class AC<T> : IB<T>
class D : IA
class E : IA
class F : AC<D>
class G : AC<E>
现在,我在AC中有一个签名为:
的方法void foo(IB<IA> param)
我想从F这样称呼它:
foo(new G())
我知道协方差和逆变的局限性,我知道语言不允许这样做。另外,我无法设置IB<out T>
。
我的问题是,在设计方面处理这种情况的正确方法是什么?
答案 0 :(得分:6)
听起来你需要使Foo
方法通用:
void Foo<T>(IB<T> param) where T : IA
此时,Foo(new G())
将隐式Foo<E>(new G())
。