Как в C# объявить подкласс EventHandler в интерфейсе?

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

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

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

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

Ответов (2)

Решение

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

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

1: объявить класс аргументов событий отдельно и использовать EventHandler<T> в интерфейсе:

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

2: отдельно объявить класс аргументов события и тип делегата:

public class MySpecialEventArgs : EventArgs {...}
public delegate void MySpecialEventHandler(object sender,
    MySpecialEventArgs args);
....
event MySpecialEventHandler MyEvent;

Предполагая C# 2.0 или новее ...

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

public interface IMyInterface
{
    event EventHandler<MyEventArgs> MyEvent;
}