Подтвердить что ты не робот

Каков синтаксис объявления события на С#?

В моем классе я хочу объявить событие, на которое могут подписаться другие классы. Каков правильный способ объявления события?

Это не работает:

public event CollectMapsReportingComplete;
4b9b3361

Ответ 1

Вы забыли упомянуть тип. Для действительно простых событий EventHandler может быть достаточно:

public event EventHandler CollectMapsReportingComplete;

Иногда вам нужно объявить свой собственный тип делегата, который будет использоваться для ваших событий, что позволит вам использовать нестандартный тип для параметра EventArgs (см. комментарий Адама Робинсона):

public delegate void CollectEventHandler(object source, MapEventArgs args);

public class MapEventArgs : EventArgs
{
    public IEnumerable<Map> Maps { get; set; }
}

Вы также можете использовать общий тип EventHandler вместо объявления своих собственных типов:

public event EventHandler<MapEventArgs> CollectMapsReportingComplete;

Ответ 2

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

public event Action CollectMapsReportingComplete;

Здесь я использовал System.Action, но вы можете использовать любой тип делегата, который вы хотите (даже пользовательский делегат). Экземпляр указанного типа делегата будет использоваться в качестве поля поддержки для события.

Ответ 3

Пример

/// </summary>
/// Event triggered when a search is entered in any <see cref="SearchPanel"/>
/// </summary>
public event EventHandler<string> SearchEntered
{
    add { searchevent += value; }
    remove { searchevent -= value; }
}
private event EventHandler<string> searchevent;

Ответ 4

public event EventHandler MyEvent;

Ответ 5

публичное событие [DelegateType] [EventName];