Wykres porównania
Podstawa do porównania | Delegaci | Wydarzenia |
---|---|---|
Podstawowy | Delegat odwołuje się do metody. | Wydarzenie jest nadmiarową abstrakcją przekazaną delegatom. |
Składnia | delegate return_type nazwa_instancji (lista_parametrów); | zdarzenie event_delegate event_name; |
Słowo kluczowe | Delegat deklarowany jest za pomocą słowa kluczowego "delegata". | Zdarzenie jest zadeklarowane za pomocą słowa kluczowego "zdarzenie". |
Deklaracja | Delegat jest zadeklarowany poza jakąkolwiek klasą. | Zdarzenie jest zadeklarowane w klasie. |
Odwołać się | Aby wywołać metodę, należy ją przekazać delegatowi. | Aby wywołać metodę, należy ją przypisać do zdarzenia. |
Kowariancja i kontrawariancja | Zapewniają one elastyczność delegatom. | Brak takiej koncepcji. |
Event Accessor | Brak takiej koncepcji. | Zarządza listą programów obsługi zdarzeń. |
Zależność | Delegaci są niezależni od wydarzeń. | Zdarzenie nie może zostać utworzone bez delegatów. |
Definicja Delegatów
W delegacjach C # są używane jako wskaźnik funkcji do odnoszenia się do metody. Jest to konkretnie obiekt, który odnosi się do metody, która jest do niego przypisana. Ten sam delegat może być użyty do odnoszenia się do różnych metod, ponieważ jest w stanie przechowywać referencje różnych metod, ale pojedynczo. Która metoda zostanie wywołana przez delegata, jest określana w środowisku wykonawczym. Składnia deklarowania delegata jest następująca:
delegate return_type nazwa_instancji (lista_parametrów);
W tym przypadku typ zwrotny deklaruje typ wartości zwracanej przez metodę, która jest wywoływana przez delegate, a nazwa_przydziału jest nazwą delegata. Lista parameter_list określa listę parametrów wymaganych przez metody, które będą wywoływane przez delegata.
Jest kilka ważnych punktów, które należy pamiętać o delegatach. Może wywoływać dowolną metodę, która pasuje do jej podpisu i typu zwracanego. Uczestnik może wywołać zarówno metodę instancji, jak i metodę statyczną. Jeśli wywołuje metodę instancji, musi skorzystać z pomocy obiektu, aby wywołać metodę. Delegaci obsługują multiemisję, tzn. Można połączyć metody, które będą automatycznie wywoływane, gdy odwołany od nich adresat zostanie wywołany. Po prostu musisz utworzyć obiekt delegata i przypisać metody jeden po drugim do łańcucha za pomocą operatora "+ =". Możesz również odblokować metodę za pomocą operatora "- =".
Funkcje, które zwiększają elastyczność delegata, to: kowariancja i kontrawariancja. Kowariancja i kontrawariancja zezwalają na warunki, w których typ zwrotu i podpis metody przypisanej do delegowania są różne od tego, z jakiego pochodzi delegat.
- Kowariancja umożliwia przypisanie metody do delegata, gdy typem zwracanym metody jest klasa wywodząca się z klasy określającej typ zwracany przez delegata.
- Kontrawariancja umożliwia przypisanie metody do delegata, gdy typ parametru metody jest klasą podstawową klasy, która jest określona jako parametr delegata.
Definicja wydarzeń
Zdarzenia są czynnością, która zmienia stan obiektu. Zdarzenia deklarowane są za pomocą delegatów, bez obecności delegatów nie można zadeklarować zdarzeń. Można powiedzieć, że zdarzenie zapewnia enkapsulację dla delegatów. Istnieją dwa ważne składniki podczas obsługi zdarzeń, które są zdarzeniem i obsługą zdarzeń. Jeśli obiekty są zainteresowane zdarzeniem, wówczas rejestruje program obsługi zdarzeń dla tego konkretnego zdarzenia. I kiedykolwiek zdarzenia są uruchamiane, wywoływane są zarejestrowane programy obsługi zdarzeń. Deklaracja tego wydarzenia jest następująca:
zdarzenie event_delegate event_name;
Tutaj "zdarzenie" jest słowem kluczowym, które pokazuje deklarację zdarzenia. Następnie event_delegate pokazuje nazwę delegata, który obsługuje wydarzenie. Wtedy event_name jest nazwą zdarzenia
Podczas zajmowania się wydarzeniami należy pamiętać o kilku ważnych kwestiach. Tak jak delegaci, zdarzeniami mogą być również multiemisje, tj. Wiele obiektów, które są powiązane (zarejestrowane) z obsługą zdarzeń, reagują, gdy wydarzenie jest wywoływane. Procedury obsługi zdarzenia można dodać do łańcucha za pomocą operatora "+ =" i można je rozwinąć za pomocą operatora "- =" Obie metody statyczne i instancyjne mogą być używane jako procedura obsługi zdarzeń. Accessor zdarzeń może zapewnić kontrolę nad implementacją listy programów obsługi zdarzeń.
Interfejs może zawierać zdarzenia. Zdarzenia mogą być również abstrakcyjne, podczas gdy zdarzenia oparte na akcesoriach nie mogą być abstrakcyjne. Zdarzenie może być wirtualne i nadpisane przez klasę pochodną.
Kluczowe różnice między delegatami i wydarzeniami w języku C #
- Delegat jest obiektem używanym jako wskaźnik funkcji do przechowywania odwołania do metody. Z drugiej strony wydarzenia stanowią abstrakcję dla delegatów.
- Słowo kluczowe wymagane do zadeklarowania delegata jest delegatem, podczas gdy słowem kluczowym wymaganym do zadeklarowania zdarzenia jest zdarzenie .
- Delegat jest zadeklarowany poza klasą, podczas gdy zdarzenie jest zadeklarowane w klasie.
- Aby wywołać metodę przy użyciu obiektu delegata, należy odwołać się do obiektu delegata. Z drugiej strony, aby wywołać metodę przy użyciu obiektu zdarzenia, należy odwołać się do obiektu zdarzenia.
- Kowariancja i kontrawariancja zapewniają dodatkową elastyczność obiektom delegowanym. Z drugiej strony wydarzenie nie ma takich pojęć.
- Event Accessor obsługuje listę programów obsługi zdarzeń, podczas gdy delegate nie ma takiej koncepcji.
- Delegaci są niezależni od wydarzeń, ale wydarzeń nie można utworzyć bez delegowania.
Wniosek:
Delegaci są przydatni, ponieważ obsługują zdarzenia i zapewniają możliwość wykonywania tej metody w czasie wykonywania. Accessor zdarzeń pozwala nam synchronizować funkcje obsługi zdarzeń w aplikacjach wielowątkowych.