我正在写一个自定义的Timer,它扩展了DispatcherTimer。它有一个名为TimerSetUp的方法,我将Tick事件与EventHandler相关联。
public class MyTimer : DispatcherTimer
{
public MyTimer(){}
public void TimerSetUp(EventHandler<EventArgs> _EventHandler)
{
base.Tick += _EventHandler;
}
}
我现在有另外两个类,StopwatchTimer和CountdownTimer,它们扩展了MyTimer。我们来看看CountdownTimer。
public class CountdownTimer : MyTimer
{
public CountdownTimer()
{
base.TimerSetUp(CountdownTimer_Tick);
}
public void CountdownTimer_Tick(object sender, EventArgs e)
{
//...do something
}
}
当声明其中任何一个时,构造函数必须调用基类方法 TimerSetUp并设置事件处理程序。
问题是,在TimerSetUp函数的签名中,它给了我这个错误
Cannot implicitly convert type 'System.EventHandler<System.EventArgs>'
to'System.EventHandler<object>
我无法摆脱它。如果我只是将TimerSetUp放在CountdownTimer中,并直接分配事件处理程序,就像这样
base.Tick += CountdownTimer_Tick;
它有效,但我真的想让它以另一种方式工作。 所以我想知道是否
1)我有办法解决这个问题
2)这是代码可扩展性的好方法吗?
答案 0 :(得分:1)
没关系,我做到了。我只是在函数签名中输入了一个泛型对象,并在代码中包含了一个新的eventHandler。
public void TimerSetUp(EventHandler<object> _EventHandler)
{
base.Tick += new EventHandler<object>(_EventHandler);
}
答案 1 :(得分:0)
DispatchTimer.Tick似乎是非通用EventHandler
而不是EventHandler<EventArgs>
。由于您仍在使用基础EventArgs
,因此它们在功能上是等效的:
public void TimerSetUp(EventHandler _EventHandler)
{
base.Tick += _EventHandler;
}