C#中委托的匿名方法,及其在协变与逆变中的应用

 委托的匿名方法
    这几天在看微软的MVP设计模式的例子的时候,偶然发现它将DropDownListSelectIndexChange事件委托直接实例化成一个不带任何参数匿名方法。
具体例子如下:

 

Code

    这让我不禁起了疑惑。SelectedIndexChanged事件委托应该要带有一个参数EventArgs才对啊。为什么它用这函数实例化呢?几经查询,终于明白了,不带括弧的delegate 关键字将定义一种特殊的匿名方法,它可以指派给具有任何签名的任何委托。就如上面的代码一样。如果使用匿名方法,则不必创建单独的方法,因此减少了实例化

委托所需的编码系统开销。

 

 委托的协变与逆变

    协变允许方法具有的派生返回类型比委托中定义的更多。而委托还有一种逆变,逆变允许方法具有的派生参数类型比委托类型中的更少。将方法签名与委托类型匹配时,协

变和逆变提供了一定程度的灵活性。
*下面分别提供两个简单的例子说明一下。
1.协变。

    以下委托将定义为具有Human返回类型的委托,而实例化委托的方法中有一个返回类型是Women类型的。Women类型是由Human类型派生的。

Code

2.逆变

    以下委托将定义为一个带有Human类型参数的委托何一个带有Women类型参数的委托。Women类型是由Human类型派生的。而实例化委托的方法中只
是一个带有Human类型参数的方法。两个委托共用一个方法实例。

Code


参考资料:MSDN官方说明文档(C#编程指南
 http://msdn.microsoft.com/zh-cn/library/ms173174(VS.80).aspx

 

 

 


posted on 2008-08-27 13:19  小猪尾巴  阅读(2292)  评论(7编辑  收藏  举报

导航