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