22

インターフェイスで(定義した)EventHandlerのサブクラスを宣言するためのコード構文は何ですか?

たとえばデリゲート宣言でEventHandlerサブクラスMyEventHandlerを作成しましたが、インターフェイスでデリゲートを宣言することはできません...

Visual Studioにインターフェイスを抽出するように依頼すると、IMyClassNameのEventHandlerがMyClassName.MyEventHandlerとして参照されます。これは、明らかに型の結合で大混乱を引き起こします。

これを行う簡単な方法があると思います。イベントハンドラーを別のファイルで明示的に宣言する必要がありますか?

4

2 に答える 2

25

ええと、引数を定義し、場合によってはどこかに委任する必要があります。2番目のファイルは必要ありませんが、おそらくお勧めします...しかし、それが元の問題である場合、クラスはおそらくネストされるべきではありません。

標準の「sender, args」パターンを使用することをお勧めします。2 つの一般的なアプローチがあります。

1: event-args クラスを個別に宣言EventHandler<T>し、インターフェイスで使用します。

public class MySpecialEventArgs : EventArgs {...}
...
EventHandler<MySpecialEventArgs> MyEvent;

2: event-args クラスとデリゲート型を別々に宣言します。

public class MySpecialEventArgs : EventArgs {...}
public delegate void MySpecialEventHandler(object sender,
    MySpecialEventArgs args);
....
event MySpecialEventHandler MyEvent;
于 2009-02-25T12:47:33.290 に答える
15

C# 2.0 以降を想定しています...

public class MyEventArgs: EventArgs
{
    // ... your event args properties and methods here...
}

public interface IMyInterface
{
    event EventHandler<MyEventArgs> MyEvent;
}
于 2009-02-25T12:49:57.387 に答える