Поделиться через


Ключевое event слово (справочник по C#)

Событие — это элемент, позволяющий объекту активировать уведомления. Пользователи событий могут присоединить исполняемый код для событий, предоставив обработчики событий. Ключевое 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 internalinternalили private protected. Эти модификаторы доступа определяют, каким образом пользователи класса смогут получать доступ к событию. Дополнительные сведения см. в статье Модификаторы доступа.

Начиная с C# 14, события могут быть partial. Частичные события имеют одно определение объявления и одно реализующее объявление. Определение объявления должно использовать синтаксис, похожий на поле. Объявление реализации должно объявлять обработчики add и remove.

Ключевые слова и события

Следующие ключевые слова применяются к событиям.

Ключевое слово Description Дополнительные сведения
static Делает событие доступным для вызывающих объектов в любое время, даже если экземпляр класса не существует. Статические классы и члены статических классов
virtual Позволяет производным классам переопределять поведение события с помощью ключевого слова override. Наследование
sealed Указывает, что для производных классов он больше не является виртуальным.
abstract Компилятор не создает блоки доступа к событиям add и remove поэтому производные классы должны предоставлять собственную реализацию.

Событие можно объявить как статическое событие с помощью статического ключевого слова. Статические события доступны вызывающим в любое время, даже если экземпляр класса не существует. Дополнительные сведения см. в статье Статические классы и члены статических классов.

Событие можно пометить как виртуальное событие с помощью ключевого virtual слова. Производные классы могут переопределить поведение события с помощью ключевого override слова. Дополнительные сведения см. в разделе Наследование. Событие, переопределяющее виртуальное событие, также может быть sealed, что указывает, что для производных классов он больше не является виртуальным. Наконец, можно объявить abstractсобытие, что означает, что компилятор не создает add блоки доступа к событиям.remove Поэтому производные классы должны предоставлять собственную реализацию.

Спецификация языка C#

Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также