如果我的EventHandler具有以下签名:
public static void ProcessStuff(object sender, ElapsedEventArgs e)
如果我尝试像这样手动调用EventHandler:
ProcessStuff(this, System.Timers.ElapsedEventArgs.Empty);
为什么我会收到错误消息:
参数2:无法从
'System.EventArgs'
转换为'System.Timers.ElapsedEventArgs'
编辑:如果我将手动调用设置为:
,我还会收到相同的错误消息ProcessStuff(this, System.EventArgs.Empty);
答案 0 :(得分:3)
我们将看到System.Timers.ElapsedEventArgs
没有重新声明 Empty
:
// No "Empty" (re-)declaration here
public class ElapsedEventArgs : EventArgs {
private DateTime signalTime;
internal ElapsedEventArgs(int low, int high) {
long fileTime = (long)((((ulong)high) << 32) | (((ulong)low) & 0xffffffff));
this.signalTime = DateTime.FromFileTime(fileTime);
}
public DateTime SignalTime {
get {
return this.signalTime;
}
}
}
这就是为什么当我们调用System.Timers.ElapsedEventArgs.Empty
时实际上会调用System.EventArgs.Empty
类型的System.EventArgs
:
Console.Write(System.Timers.ElapsedEventArgs.Empty.GetType().Name);
最后,从System.EventArgs
到System.Timers.ElapsedEventArgs
答案 1 :(得分:2)
System.Timers.ElapsedEventArgs.Empty实际上不是ElapsedEventArgs类型的空arg。转到定义(F12),您将看到它导致了System.EventArgs.Empty。
由于它是公共的,并且ElapsedEventArgs继承自EventArgs,因此也可以通过ElapsedEventArgs类进行访问。