event (Справочник по C#)
Обновлен: Ноябрь 2007
Используйте ключевое слово event для объявления события в классе издателя.
Пример
В следующем примере показано как объявить и инициировать событие, использующее EventHandler в качестве базового типа делегата. Полный пример кода, демонстрирующий использование универсального типа делегата EventHandler<TEventArgs>, а также подписку на событие и создание метода обработчика событий см. в разделе Практическое руководство. Публикация событий, соответствующих рекомендациям .NET Framework (руководство по программированию в C#).
public class SampleEventArgs
{
public SampleEventArgs(string s) { Text = s; }
public String Text {get; private set;} // readonly
}
public class Publisher
{
// Declare the delegate (if using non-generic pattern).
public delegate void SampleEventHandler(object sender, SampleEventArgs e);
// Declare the event.
public event SampleEventHandler SampleEvent;
// Wrap the event in a protected virtual method
// to enable derived classes to raise the event.
protected virtual void RaiseSampleEvent()
{
// Raise the event by using the () operator.
SampleEvent(this, new SampleEventArgs("Hello"));
}
}
События это особый тип многоадресных делегатов, которые можно вызвать только из класса или структуры, в которой они объявлены (класс издателя). Если на событие подписаны другие классы или структуры, их методы обработчиков событий будут вызваны когда класс издателя инициирует событие. Дополнительные сведения и примеры кода см. в разделах События (Руководство по программированию в C#) и Делегаты (руководство по программированию на C#).
События можно пометить как открытые (public), закрытые (private), защищенные (protected), внутренние (internal) или protectedinternal. Эти модификаторы доступа определяют порядок доступа к классу для пользователей класса. Дополнительные сведения см. в разделе Модификаторы доступа (Руководство по программированию в C#).
Ключевые слова и события
К событиям применяются следующие ключевые слова.
Ключевое слово |
Описание |
Дополнительные сведения |
---|---|---|
Делает событие доступным для вызова в любое время, даже если экземпляр класса отсутствует. |
Статические классы и члены статических классов (руководство по программированию в C#) |
|
Позволяет производным классам переопределять поведение события при помощи ключевого слова override. |
||
Указывает, что для производных классов событие более не является виртуальным. |
|
|
Компилятор не создаст блоки методов доступа к событиям add и remove и, следовательно, производные классы должны предоставлять собственную реализацию. |
|
Событие можно объявить как статическое событие при помощи ключевого слова static. При этом событие становится доступным для вызова в любое время, даже если экземпляр класса отсутствует. Дополнительные сведения см. в разделе Статические классы и члены статических классов (руководство по программированию в C#).
Событие может быть помечено как виртуальное событие при помощи ключевого слова virtual. Это позволяет производным классам переопределять поведение события при помощи ключевого слова override. Дополнительные сведения см. в разделе Наследование (Руководство по программированию в C#). Событие, переопределяющее виртуальное событие, может также быть sealed, что определяет, что для производных классов оно более не является виртуальным. И наконец, событие можно объявить как abstract, что означает, что компилятор не создаст блоки методов доступа к событию add и remove. Таким образом, производные классы должны предоставлять собственную реализацию.
Спецификация языка C#
Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:
1.6.6.4 События
7.16.3 Присвоения событий
10.8 События
13.2.3 События интерфейса
См. также
Задачи
Основные понятия
Руководство по программированию в C#
Ссылки
Модификаторы (Справочник по C#)