委托中的协变和逆变(C# 编程指南)
2011-05-13 14:49
288 查看
将方法签名与委托类型匹配时,协变和逆变为您提供了一定程度的灵活性。协变允许方法具有的派生返回类型比委托中定义的更多。逆变允许方法具有的派生参数类型比委托类型中的更少。
一、协变
本示例演示如何将委托与具有返回类型的方法一起使用,这些返回类型派生自委托签名中的返回类型。由 SecondHandler 返回的数据类型是 Dogs 类型,它是由委托中定义的 Mammals 类型派生的。
二、逆变
本示例演示如何将委托与具有某个类型的参数的方法一起使用,这些参数是委托签名参数类型的基类型。通过逆变,以前必须使用若干个不同处理程序的地方现在只要使用一个事件处理程序即可 。如,现在可以创建一个接收 EventArgs 输入参数的事件处理程序,然后,可以将该处理程序与发送 MouseEventArgs 类型(作为参数)的 Button.MouseClick 事件一起使用,也可以将该处理程序与发送 KeyEventArgs 参数的 TextBox.KeyDown 事件一起使用。
源于:MSDN
一、协变
本示例演示如何将委托与具有返回类型的方法一起使用,这些返回类型派生自委托签名中的返回类型。由 SecondHandler 返回的数据类型是 Dogs 类型,它是由委托中定义的 Mammals 类型派生的。
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; } }
二、逆变
本示例演示如何将委托与具有某个类型的参数的方法一起使用,这些参数是委托签名参数类型的基类型。通过逆变,以前必须使用若干个不同处理程序的地方现在只要使用一个事件处理程序即可 。如,现在可以创建一个接收 EventArgs 输入参数的事件处理程序,然后,可以将该处理程序与发送 MouseEventArgs 类型(作为参数)的 Button.MouseClick 事件一起使用,也可以将该处理程序与发送 KeyEventArgs 参数的 TextBox.KeyDown 事件一起使用。
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 parameter private void MultiHandler(object sender, System.EventArgs e) { lastActivity = System.DateTime.Now; }
源于:MSDN
相关文章推荐
- 委托中的协变和逆变(C# 编程指南)
- 委托中的协变和逆变(C# 编程指南)
- 委托中的协变和逆变(C# 编程指南)
- <转>C# 4.0 为泛型编程引入了 协变 和 逆变 支持,这是个不错的福利,能省掉以往的一些麻烦。不过当前(Beta2)仅支持泛型接口和泛型委托。
- 合并委托(多路广播委托)(C# 编程指南)
- c#编程指南(三) 泛型委托(Generic Delegate)
- 委托(C# 编程指南)
- 何时使用委托而不使用接口(C# 编程指南)
- <转>C# 4.0 为泛型编程引入了 协变 和 逆变 支持,这是个不错的福利,能省掉以往的一些麻烦。不过当前(Beta2)仅支持泛型接口和泛型委托。
- 何时使用委托而不使用接口(C# 编程指南)
- 何时使用委托而不使用接口(C# 编程指南)
- 三种实例化委托的方式(C# 编程指南)
- 委托(C# 编程指南)
- C#中委托的匿名方法,及其在协变与逆变中的应用
- C# 语言特性系列(1) 委托 - 协变和逆变
- 如何:合并委托(多路广播委托)(C# 编程指南)
- C# 4.0新特性——“协变”与“逆变”以及背后的编程思想(转)
- c#编程指南(三) 泛型委托(Generic Delegate)
- 使用委托(C# 编程指南)
- 如何:声明、实例化和使用委托(C# 编程指南)