日期:2014-05-19  浏览次数:20754 次

关于C#委托的一个问题(我刚接触C#,希望大家多多帮助)
想请教各位一个有关C#委托的问题:
有这样一条语句
pollTimer.Elapsed   +=   new   ElapsedEventHandler(CheckForMessage);  
函数签名是:private   void   CheckForMessage(object   source,   ElapsedEventArgs   e)  
把签名改成:private   void   CheckForMessage(object   source,   EventArgs   e)   仍然没问题  
甚至改成private   void   CheckForMessage(object   source,   object   e)   也没问题   这是为什么?  
委托不是要匹配函数签名的么?

------解决方案--------------------
支持自动转型。即使是返回值也可以向下兼容
------解决方案--------------------
ElapsedEventArgs 是从 EventArgs 继承 来的


定义的肯定是基类

如果定义子类 积累就不能用
------解决方案--------------------
这是2.0中一个总是被人忽视的新特性,委托的协变和逆变。

详情请打开你的VS帮助,索引协变,或者参阅下面地址:
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_csref/html/e6acad03-93e0-4efb-a158-8696d5eb4ecf.htm