Udostępnij przez


Słowo event kluczowe (odwołanie w C#)

Zdarzenie jest elementem członkowskim, który umożliwia obiektowi wyzwalanie powiadomień. Użytkownicy zdarzeń mogą dołączać kod wykonywalny dla zdarzeń, dostarczając programy obsługi zdarzeń. Słowo event kluczowe deklaruje zdarzenie. Zdarzenie jest typu delegata. Gdy obiekt wyzwala zdarzenie, zdarzenie wywołuje wszystkie dostarczone programy obsługi zdarzeń. Programy obsługi zdarzeń to wystąpienia delegowane dodawane do zdarzenia i wykonywane po wystąpieniu zdarzenia. Użytkownicy zdarzeń mogą dodawać lub usuwać programy obsługi zdarzeń w zdarzeniu.

W poniższym przykładzie pokazano, jak zadeklarować i zgłosić zdarzenie, które jest używane EventHandler jako podstawowy typ delegata. Pełny przykład kodu można znaleźć w temacie How to publish events that conform to .NET Guidelines (Jak publikować zdarzenia zgodne z wytycznymi platformy .NET). W tym przykładzie pokazano ogólny EventHandler<TEventArgs> typ delegata, sposób subskrybowania zdarzenia i tworzenia metody obsługi zdarzeń,

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"));
    }
}

Zdarzenia to delegaty multiemisji, które mogą być wywoływane tylko z klasy (lub klas pochodnych) lub struktury, w której są deklarowane (klasa wydawcy). Jeśli inne klasy lub struktury subskrybują zdarzenie, metody obsługi zdarzeń są wywoływane, gdy klasa wydawcy zgłasza zdarzenie. Aby uzyskać więcej informacji i przykładów kodu, zobacz Zdarzenia i delegaty.

Zdarzenia mogą być oznaczone jako public, , private, internalprotected, , protected internallub private protected. Te modyfikatory dostępu definiują, jak użytkownicy klasy mogą uzyskiwać dostęp do zdarzenia. Aby uzyskać więcej informacji, zobacz Modyfikatory dostępu.

Począwszy od języka C# 14, zdarzenia mogą mieć wartość partial. Zdarzenia częściowe mają jedną deklarację definiującą i jedną deklarację implementowania. Deklaracja definiująca musi używać składni podobnej do pola. Deklaracja implementacji musi zadeklarować procedury obsługi add i remove.

Słowa kluczowe i zdarzenia

Następujące słowa kluczowe dotyczą zdarzeń.

Słowo kluczowe opis Więcej informacji
static Udostępnia zdarzenie obiektom wywołującym w dowolnym momencie, nawet jeśli nie istnieje żadne wystąpienie klasy. Klasy statyczne i statyczne elementy członkowskie klas
virtual Umożliwia klasom pochodnym zastąpienie zachowania zdarzenia za pomocą słowa kluczowego zastąpienia . Dziedziczenie
sealed Określa, że dla klas pochodnych nie jest już wirtualny.
abstract Kompilator nie generuje add bloków metod dostępu do zdarzeń i remove i dlatego klasy pochodne muszą zapewnić własną implementację.

Zdarzenie można zadeklarować jako zdarzenie statyczne przy użyciu statycznego słowa kluczowego. Zdarzenia statyczne są dostępne dla osób wywołujących w dowolnym momencie, nawet jeśli nie istnieje żadne wystąpienie klasy. Aby uzyskać więcej informacji, zobacz Klasy statyczne i składowe klas statycznych.

Zdarzenie można oznaczyć jako zdarzenie wirtualne za pomocą słowa kluczowego virtual . Klasy pochodne mogą zastąpić zachowanie zdarzenia za pomocą słowa kluczowego override . Aby uzyskać więcej informacji, zobacz Dziedziczenie. Zdarzenie przesłaniające zdarzenie wirtualne może również mieć sealedwartość , która określa, że dla klas pochodnych nie jest już wirtualny. Na koniec można zadeklarować abstractzdarzenie , co oznacza, że kompilator nie generuje bloków dostępu zdarzeń add i remove . W związku z tym klasy pochodne muszą zapewnić własną implementację.

specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też