В C #, как вы объявляете подкласс EventHandler в интерфейсе? - PullRequest
22 голосов
/ 25 февраля 2009

Каков синтаксис кода для объявления подкласса EventHandler (который вы определили) в интерфейсе?

Я создаю подкласс EventHandler MyEventHandler, например, в объявлении делегата, но вы не можете объявить делегата в интерфейсе ...

Когда я запрашиваю Visual Studio для извлечения интерфейса, он ссылается на EventHandler в IMyClassName как MyClassName.MyEventHandler, который явно портит связь типов.

Я предполагаю, что есть простой способ сделать это. Должен ли я явно объявить свой обработчик событий в отдельном файле?

Ответы [ 2 ]

25 голосов
/ 25 февраля 2009

Ну, вам нужно определить аргументы и, возможно, делегировать куда-нибудь. Вам не нужен второй файл, но я, вероятно, рекомендую его ... но классы, вероятно, не должны быть вложенными , если бы это была первоначальная проблема.

Рекомендуется использовать стандартный шаблон «отправитель, аргументы»; Есть два подхода cmmon:

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;
15 голосов
/ 25 февраля 2009

Предполагая, что C # 2.0 или позже ...

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

public interface IMyInterface
{
    event EventHandler<MyEventArgs> MyEvent;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...