C#高级程序设计(五)——代理中的协变和逆变
来源:互联网 发布:淘宝微淘在哪里发布 编辑:程序博客网 时间:2024/06/07 05:51
将方法签名与代理类型匹配时,协变和逆变为您提供了一定程度的灵活性。协变允许方法具有的派生返回类型比委托中定义的更多。逆变允许方法具有的派生参数类型比委托类型中的更少。
一、逆变
对于下面的三个代理类型:
delegate void EventHandler (object sender, EventArgs e)delegate void KeyPressEventHandler (object sender, KeyPressEventArgs e)delegate void MouseEventHandler (object sender, MouseEventArgs e)
由于KeyPressEventArgs和MouseEventArgs都继承自EventArgs,因此,如果你有一个EventArgs参数的方法,你总能用一个KeyPressEventArgs类型的参数去掉用,因此用类似EventHandler签名的方法去创建KeyPressEventHandler类型的代理对象就显得有意义了。这正是C#2所支持的特性。
System.DateTime lastActivity;public Form1(){ InitializeComponent(); lastActivity = new System.DateTime(); this.textBox1.KeyDown += this.MultiHandler; //works with KeyEventArgs this.button1.MouseClick += this.MultiHandler; //works with MouseEventArgs}// Event hander for any event with an EventArgs or// derived class in the second parameterprivate void MultiHandler(object sender, System.EventArgs e){ lastActivity = System.DateTime.Now;}
二、协变
协变是针对返回值类型具有可转换类型的情况,下面是协变的例子:
class Mammals{}class Dogs : Mammals{}class Program{ // Define the delegate. public delegate Mammals HandlerMethod(); public static Mammals FirstHandler() { return null; } public static Dogs SecondHandler() { return null; } static void Main() { HandlerMethod handler1 = FirstHandler; // Covariance allows this delegate. HandlerMethod handler2 = SecondHandler; }}
- C#高级程序设计(五)——代理中的协变和逆变
- C# 中的协变和逆变
- C#中的协变与抗变(逆变)
- C# 4.0中的协变和逆变
- C#4.0中的协变和逆变
- 10分钟了解C#中的协变和逆变
- C#委托中的协变和逆变
- [转]C#4.0中的协变和逆变
- C#中的协变与逆变
- C# 4 协变和逆变
- c# 委托 协变和逆变
- C# 协变和逆变
- C# 协变和逆变
- C#的协变和逆变
- C# 协变和逆变
- 委托中的协变和逆变(C# 编程指南)
- 委托中的协变和逆变(C# 编程指南)
- 委托中的协变和逆变
- brew的简单命令
- iphone 4的新版IOS 5悄然来了!
- 需求分析
- 美联储言论令QE3预期升温,非美延续反弹
- Struts2+Spring+Hibernate搭建全解!
- C#高级程序设计(五)——代理中的协变和逆变
- jboss7配置mysql数据源
- PHP中文乱码的常见解决方法总结
- Customerize NSTableHeaderCell and apply it in tableview
- Onbeforeunload和onunload的深入交流分析(2012.08.23)
- 初识WMI编程
- 腾讯数组乘积赋值的问题
- Android JSON字符串解析和构建 .
- 单线程模型中Message、Handler、Message Queue、Looper之间的关系