3

私はの線に沿って何かを実装しようとしています

class Receiver {
    public RegisterEvent<T>(???);
}

class EventTypeClass {
    ...
}

class MyApp
{
    public MyApp()
    {
        RegisterEvent<EventTypeClass>(MyEventHandler);
    }

    void MyEventHandler(EventTypeClass param)
    {
        // Handle event of type 'EventTypeClass'
    }
}

厳密に型指定されたイベント ハンドラーをパラメーターとして渡す方法がわかりません。それが可能かどうか、または次のようなものを使用する必要があるかどうかもわかりません。

void MyEventHandler(object param)
{
    var castedParam = param as EventTypeClass;
}
4

2 に答える 2

4

次のように、ジェネリック型を引数に渡すだけです。

class Receiver {
    public RegisterEvent<T>(T param);
} 

T引数リストの は、呼び出しに提供された型と一致する必要があります。

編集:質問を読み直した..おそらくこれは実際にあなたが意図したものです:

public delegate void CustomEventHandler<T>(T param);
public void RegisterEvent<T>(CustomEventHandler<T> eh) {

}

..しかし、同じ哲学。

于 2013-07-16T10:52:49.690 に答える
0

一般的なデリゲートを取得するには、RegisterEvent メソッドが必要なようです。

delegate void EventHandlerDelegate< ClassType >( ClassType p );
class Receiver
{
    public RegisterEvent< T >( EventHandlerDelegate< T > callback );
}

これは、呼び出しコードがジェネリック メソッドを「閉じる」ために型を明示的に提供する必要がないことも意味します。

receiver.RegisterEvent( MyEventHandler );

なぜイベントだけを使用していないのかという疑問が生じます....

于 2013-07-16T11:03:27.427 に答える