Справочник по C#. event
Ключевое слово event
используется для объявления события в классе Publisher.
Пример
Следующий пример демонстрирует объявление и вызов события, которое использует EventHandler как базовый тип делегата. Полный пример кода, демонстрирующий использование универсального типа делегата EventHandler<TEventArgs>, создание подписки на событие и создание метода обработчика событий, см. в статье Публикация событий, соответствующих рекомендациям .NET.
public class SampleEventArgs
{
public SampleEventArgs(string text) { Text = text; }
public string Text { get; } // 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 in a thread-safe manner using the ?. operator.
SampleEvent?.Invoke(this, new SampleEventArgs("Hello"));
}
}
События — это особый тип делегата многоадресной рассылки, который может вызываться только из класса (или производных классов) или структуры, в которой они объявлены (класс издателя). Если другие классы или структуры подписываются на событие, их методы обработчиков событий будут вызываться, когда класс Publisher будет вызывать событие. Дополнительные сведения и примеры кода см. в разделах События и Делегаты.
События могут иметь пометку public, private, protected, internal, protected internal или private protected. Эти модификаторы доступа определяют, каким образом пользователи класса смогут получать доступ к событию. Дополнительные сведения см. в статье Модификаторы доступа.
Ключевые слова и события
Следующие ключевые слова применяются к событиям.
Ключевое слово | Описание | Дополнительные сведения |
---|---|---|
static | Делает событие доступным для вызывающих объектов в любое время, даже если экземпляр класса не существует. | Статические классы и члены статических классов |
virtual | Позволяет производным классам переопределять поведение события с помощью ключевого слова override. | Наследование |
sealed | Указывает, что для производных классов оно больше не является виртуальным. | |
abstract | Компилятор не будет создавать блоки доступа к событиям add и remove , и поэтому производные классы должны предоставлять собственную реализацию. |
Событие может быть объявлено как статическое событие с помощью ключевого слова static. Это делает событие доступным для вызывающих объектов в любое время, даже если экземпляр класса не существует. Дополнительные сведения см. в статье Статические классы и члены статических классов.
Событие может быть помечено как виртуальное событие с помощью ключевого слова virtual. Это позволяет производным классам переопределять поведение события с помощью ключевого слова override. Дополнительные сведения см. в разделе Наследование. Событие, переопределяющее виртуальное событие, также может быть запечатанным (sealed), что указывает, что для производных классов оно больше не является виртуальным. И наконец, можно объявить событие абстрактным (abstract), что означает, что компилятор не будет создавать блоки доступа к событиям add
и remove
. Поэтому производные классы должны предоставлять собственную реализацию.
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.