Класс sender
Рассмотрим теперь, как устроен в нашем примере класс, создающий события. Начнем со свойств класса:
// Класс, создающий событие. Потомок класса ArrayList. public class ListWithChangedEvent: ArrayList { //Свойства класса: событие и его аргументы //Событие Changed, зажигаемое при всех изменениях //элементов списка. public event ChangedEventHandler Changed; //Аргументы события private ChangedEventArgs evargs = new ChangedEventArgs();
Первое свойство описывает событие Changed. Оно открыто, что позволяет присоединять к нему обработчиков событий. Второе закрытое свойство определяет аргументы события, передаваемые обработчикам.
Хороший стиль требует задания в классе процедуры On, включающей событие. Так и поступим:
//Методы класса: процедура On и переопределяемые методы. //Процедура On, включающая событие protected virtual void OnChanged(ChangedEventArgs args) { if (Changed != null) Changed(this, args); }
Процедура OnChanged полностью соответствует ранее описанному образцу, поэтому не требует дополнительных комментариев.
Наш класс, являясь наследником класса ArrayList, наследует все его методы. Переопределим методы, изменяющие элементы:
- метод Add, добавляющий новый элемент в конец списка;
- индексатор this, дающий доступ к элементу списка по индексу;
- метод Clear, производящий чистку списка.