【发布时间】:2010-05-20 10:28:20
【问题描述】:
(我会自己检查一下,但我还没有 VS2010)
假设我有 2 个基本接口:
IBaseModelInterface
IBaseViewInterface
以及实现这些的 2 个接口:
ISubModelInterface : IBaseModelInterface
ISubViewInterface : IBaseViewInterface
如果我定义一个Tuple<IBaseModelInterface, IBaseViewInterface>,我想根据返回Tuple<ISubModelInterface, ISubViewInterface> 的工厂的结果来设置它。
在 C# 3 中,即使子接口实现了基本接口,我也无法做到这一点。而且我很确定如果我使用 IEnumerable<IBaseModelInterface>,C# 4 允许我这样做,因为它现在使用 in 关键字定义以允许协方差。那么Tuple 允许我这样做吗?
据我了解(很少),协方差只允许在接口上使用,这是否意味着需要有一个ITuple<T1, T2> 接口?这存在吗?
【问题讨论】:
-
请注意,“in”关键字允许逆变,而不是协方差。 IEnumerable
被标记为 out,因为 T 来自 IEnumerable 。
标签: c# covariance tuples