.net - 从语言上讲,逆变与委托(delegate)有什么关系?

标签 .net delegates definition covariance contravariance

来自 Wikipedia :

协变:从较宽( double )转换为较窄(浮点)。
逆变:从较窄( float )转换为较宽( double )。

在 .NET 中,委托(delegate)具有协变性,因为它允许委托(delegate)的指定返回类型的派生类型成为它所引用的方法的返回类型。

委托(delegate)也具有逆变性,因为它允许委托(delegate)的指定参数(参数)的派生类型成为传递给它持有引用的方法的参数类型。

根据这两个与委托(delegate)相关的定义,它们不应该都是协方差吗?在这两种情况下,委托(delegate)人期望的是“更宽”的类型,但却被赋予了“更窄的类型”。

参见 here来自 MSDN 的示例。

那么,逆变 这个词在与委托(delegate)相关时在语言上有何意义?

最佳答案

http://blogs.msdn.com/b/ericlippert/archive/2009/11/30/what-s-the-difference-between-covariance-and-assignment-compatibility.aspx

最后一段简要总结了赋值兼容性。

//从语言上讲,这在参数与返回的意义上似乎是合乎逻辑的 - 所以方向//forward 或 backward 是关于进入或离开函数的。

关于.net - 从语言上讲,逆变与委托(delegate)有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236831/

相关文章:

c# - 访问在运行时创建的任何后台 worker

iOS >> 协议(protocol)和委托(delegate)概念

c++ - 在mysql服务器源代码中找不到 'ib_lock_t'的定义

Python-代码不保留定义中分配的变量

typescript - 类中的枚举(TypeScript 定义文件)

.net - 如何在Visual Studio 2010下将C++/CLI的.NET 4客户端配置文件作为目标?

c# - PetaPoco 未返回预期数据

c# - WCF AddServiceReference 导致自定义工具错误,不生成代理

ios - 自定义委托(delegate)不响应 iOS

IOS LaunchImage 操作 - 我可以控制它在屏幕上停留的时间吗?