A делегат - это набор из одной или нескольких ссылок на методы с одинаковыми сигнатурами методов. В c # +
(или +=
) используется для добавления новых методов к делегату, а -
(или -=
) используется для удаления методов из делегата.
Событие - это то, что можно вызвать в коде, чтобы затем вызвать все методы, связанные с его делегатом. У событий почти всегда есть делегаты, которые возвращают void
с двумя аргументами: Object sender
и аргументы события, которые всегда являются классом, производным от System.EventArgs
.
Например, если я хочу написать событие OnCookFood в моем классе Chef. Примечание: это предполагает, что я сначала написал CookEventArgs
класс, потому что я, вероятно, хотел бы передать, какую еду готовит мой шеф-повар.
// modifier delegate void HandlerName(Object sender, EventArgsClass e)
// modifier event HandlerName EventName
public delegate void CookFoodHandler(Object sender, CookEventArgs e);
public event CookFoodHandler OnCookFood;
// More code...
OnCookFood(new CookEventArgs("Pie"));
Конечно, это сложный способ сделать это. Вы можете использовать класс EventHandler<T>
, чтобы компилятор создал делегат для вас:
public event EventHandler<CookEventArgs> OnCookFood;
// More code...
OnCookFood(new CookEventArgs("Pie"));
и, наконец, добавить обработчик; при условии, что у нас есть объект cook
:
void HandleCooking(Object e, CookEventArgs e) {
// Do something here
}
// in another function, probably the constructor...
cook.OnCookFood += HandleCooking;