c# - 如何处理协方差限制?

标签 c# covariance

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

我的类结构如下:

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/

相关文章:

C# protoactor - 替代 Akka.NETs pipeto?

c# - SQLite 记录是如何更新的?

c# - 关于C#协方差的问题

c# - C#中涉及集合、泛型和接口(interface)的设计问题

c# - 是否有检测 ASP.NET 的指令?

c# - Xamarin Studio 代码完成和导航不起作用

kotlin - 类型推断失败。预期类型不匹配

C++横向协变: return type differs due to incomplete type

java - Scala 中的协方差

c# - 分解和简化复杂的 WPF 自定义控件的好方法是什么?