如何处理协方差限制



这基本上是一个设计问题。

我的班级结构如下:

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>

我的问题是,在设计方面,处理这种情况的正确方法是什么?

听起来您需要使Foo方法通用:

void Foo<T>(IB<T> param) where T : IA

在这一点上,Foo(new G())将隐含地为Foo<E>(new G())

相关内容

  • 没有找到相关文章

最新更新