【发布时间】:2018-12-18 08:56:10
【问题描述】:
我将 CoVariance 和 CotraVariance 的概念理解为,当需要将接口标记为 只读 时,我们使用 out T 和 Write -only 接口我们使用 in T 以便确保类型安全性超过获取和设置对象的内容。但是当我们嵌套这些时,ContraVariance 是如何被视为 CoVariance 的。例如:
interface IObservable<out T>
{
IDisposable Subscribe(IObserver<T> o);
}
interface IObserver<in T>
{
void OnNext(T t);
void OnError(Exception e);
void OnCompleted();
}
请举例说明嵌套事物如何改变它们的方差。 或者请将我重定向到一个好的阅读材料。提前致谢。
【问题讨论】:
-
该代码中没有嵌套任何内容?
-
对不起,我没有找到确切的词。这里 IObserver 是 T 上的逆变器。我希望 IObservable 具有
,因为它需要 IObserver (T 的某个容器)。 -
@Enigmativity 逆变器
IObserver<>作为另一个接口的方法Subscribe中的“传入”参数,另一个接口可以合法地声明为协变。 -
对于阅读材料,Martin Abadi 和 Luca Cardelli 所写的 Theory of Objects 包含有关此主题的部分。
标签: c# covariance contravariance