这基本上是一个设计问题。
我的类结构如下:
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())
.
关于c# - 如何处理协方差限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33626936/