[英]Passing an event handler as argument in C#
我正在編寫一個自定義的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)這是代碼擴展的好方法嗎?
沒關系,我做到了。 我只是在函數簽名中強制轉換了一個通用對象,並在代碼內包裝了一個新的eventHandler。
public void TimerSetUp(EventHandler<object> _EventHandler)
{
base.Tick += new EventHandler<object>(_EventHandler);
}
DispatchTimer.Tick似乎是非通用的EventHandler
而不是EventHandler<EventArgs>
。 由於無論如何都使用基本EventArgs
,因此它們在功能上是等效的:
public void TimerSetUp(EventHandler _EventHandler)
{
base.Tick += _EventHandler;
}
請參閱: https : //msdn.microsoft.com/zh-cn/library/system.windows.threading.dispatchertimer.tick(v=vs.110).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.