Задача: создать событие в своем классе, на которое можно подписаться извне и которое будет происходить при определенных условиях.
Для решения задачи надо внутри класса описать само событие с использованием ключевого слова event, задать делегат (проще говоря шаблон) функции-обработчика, по которому такие функции будут создаваться во внешнем коде. При желании можно еще создать собственный класс аргументов события, тех данных, которые будут передаваться к подписанной на событие функции. Если желания нет, можно использовать стандартный класс EventArgs, описывающий по сути дела пустое событие без аргументов. Если желание есть, придется наследоваться от этого класса.
Итак, мы пишем компьютерную игру. В игре есть персонаж-герой, у него есть жизнь, измеряемая числом от 1 до 100. В результате сражений жизнь может изменяться. При изменении жизни надо обновлять число на экране, если жизнь становится меньше 20, выводить предупреждение.
public class Hero { // описание события public event HealthChangedHandler HealthChanged; // делегат для подписывающихся на событие обработчиков public delegate void HealthChangedHandler(object sender, EventArgs eventArgs); private int _health = 100; public int Health { get { return _health; } set { _health = value; // если на событие не подписан ни один обработчик, здесь будет null if (HealthChanged != null) { EventArgs eventArgs = new EventArgs(); HealthChanged(this, eventArgs); } } } }
предположим, что игра происходит в окне Windows Forms (в жизни бывает еще и не такое) c текстовой меткой _heroHealthLabel и кнопкой _damageHeroButton
Читать далее