关于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