4

私は現在、EventHandler次のようなユーティリティ関数にオブジェクトを渡しています:

Timer newTimer(int interval, System.Timers.ElapsedEventHandler handler) {
    ....
    timer.Elapsed += handler;
    ....
}

newTimer(1000, new System.Timers.ElapsedEventHandler(myTimer_Tick));

しかし、これは見苦しく、すべての呼び出し元がEventHandlerオブジェクトを作成する必要があります。それをこのようなものに変更するにはどうすればよいですか?

Timer newTimer(int interval, ref Function handler) {
    ....
    timer.Elapsed += new System.Timers.ElapsedEventHandler(handler);
    ....
}

newTimer(1000, ref myTimer_Tick);
4

1 に答える 1

6

refここで使用している理由は明確myTimer_Tickではありませんが、署名が正しい場合は、メソッドをまったく変更する必要はありません。次のように使用できます。

newTimer(1000, myTimer_Tick);

これは、明示的なデリゲート作成ステートメントの代わりにメソッド グループ変換を使用します。しかし、それは同じことをします。

パラメーターなしの void メソッドを使用できるようにしたい場合は、ラムダ式を使用して を取り、Actionそれをラップするヘルパー メソッドを作成できます。ElapsedEventHandler

Timer StartTimer(int interval, Action action)
{
    ...
    timer.Elapsed = (sender, args) => action();
    ...
}
于 2012-09-02T07:52:29.060 に答える