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.

Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację dla funkcjonalności w publicznych wersjach testowych nadchodzącego wydania języka.

Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.

Wskazówka

Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.

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 można wywoływać 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 można oznaczyć jako public, , private, protectedinternal, 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, można zadeklarować zdarzenia jako 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ń.

  • static: udostępnia zdarzenie obiektom wywołującym w dowolnym momencie, nawet jeśli żadne wystąpienie klasy nie istnieje. Aby uzyskać więcej informacji na temat zdarzeń statycznych, zobacz Statyczne klasy i składowe klas statycznych.
  • virtual: umożliwia klasom pochodnym zastąpienie zachowania zdarzenia za pomocą słowa kluczowego zastąpienia . Aby uzyskać więcej informacji na temat zdarzeń wirtualnych, zobacz Dziedziczenie.
  • sealed: Określa, że dla klas pochodnych nie jest już wirtualny.
  • abstract: Kompilator nie generuje add bloków metod dostępu zdarzeń i remove i i dlatego klasy pochodne muszą zapewnić własną implementację.

Użyj słowa kluczowego static , aby zadeklarować zdarzenie jako zdarzenie statyczne. 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.

Użyj słowa kluczowego virtual , aby oznaczyć zdarzenie jako zdarzenie wirtualne. 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ą zapewniać 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ż