Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ключевое
Событие — это элемент, позволяющий объекту активировать уведомления. Пользователи событий могут присоединить исполняемый код для событий, предоставив обработчики событий. Ключевое eventслово объявляет событие. Событие имеет тип делегата. Хотя объект активирует событие, событие вызывает все предоставленные обработчики событий. Обработчики событий — это экземпляры делегатов, добавленные в событие и выполняемые при возникновении события. Пользователи событий могут добавлять или удалять обработчики событий в событии.
Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.
Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.
Подсказка
Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.
Следующий пример демонстрирует объявление и вызов события, которое использует EventHandler как базовый тип делегата. Полный пример кода см. в разделе "Публикация событий, соответствующих рекомендациям .NET". В этом примере демонстрируется универсальный EventHandler<TEventArgs> тип делегата, как подписаться на событие и создать метод обработчика событий.
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"));
}
}
События — это делегаты многоадресной рассылки, которые можно вызывать только из класса (или производных классов) или структуру, в которой вы объявляете их (класс издателя). Если другие классы или структуры подписываются на событие, их методы обработчика событий вызываются, когда класс издателя вызывает событие. Дополнительные сведения и примеры кода см. в разделах События и Делегаты.
События можно пометить как public, private, , internalprotected, protected internalили private protected. Эти модификаторы доступа определяют, каким образом пользователи класса смогут получать доступ к событию. Дополнительные сведения см. в статье Модификаторы доступа.
Начиная с C# 14, можно объявить события как partial. Частичные события имеют одно определение объявления и одно реализующее объявление. Определение объявления должно использовать синтаксис, похожий на поле. Объявление реализации должно объявлять обработчики add и remove.
Ключевые слова и события
Следующие ключевые слова применяются к событиям.
-
static: делает событие доступным для вызывающих абонентов в любое время, даже если экземпляр класса не существует. Дополнительные сведения о статических событиях см. в разделе "Статические классы" и "Члены статических классов". -
virtual: позволяет производным классам переопределять поведение события с помощью ключевого слова переопределения . Дополнительные сведения о виртуальных событиях см. в разделе "Наследование". -
sealed: указывает, что для производных классов он больше не является виртуальным. -
abstract: компилятор не создаетaddблоки доступа к событиям иremoveпоэтому производные классы должны предоставлять собственную реализацию.
Используйте ключевое static слово для объявления события как статического события. Статические события доступны вызывающим в любое время, даже если экземпляр класса не существует. Дополнительные сведения см. в статье Статические классы и члены статических классов.
Используйте ключевое virtual слово, чтобы пометить событие как виртуальное событие. Производные классы могут переопределить поведение события с помощью ключевого override слова. Дополнительные сведения см. в разделе Наследование. Событие, переопределяющее виртуальное событие, также может быть sealed, что указывает, что для производных классов он больше не является виртуальным. Наконец, можно объявить abstractсобытие, что означает, что компилятор не создает add блоки доступа к событиям.remove Поэтому производные классы должны предоставлять собственную реализацию.
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.