Справочник по 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#.

См. также