Справочник по 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. Эти модификаторы доступа определяют, каким образом пользователи класса смогут получать доступ к событию. Дополнительные сведения см. в статье Модификаторы доступа.

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

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

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

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

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

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

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

См. также