__event
Słowa kluczowego
Deklaruje zdarzenie.
Uwaga
Atrybuty zdarzeń w natywnym języku C++ są niezgodne z językiem Standard C++. Nie są one kompilowane podczas określania /permissive-
trybu zgodności.
Składnia
__event
member-function-declarator
;
__event
__interface
interface-specifier
;
__event
data-member-declarator
;
Uwagi
Słowo kluczowe __event
specyficzne dla firmy Microsoft można zastosować do deklaracji funkcji składowej, deklaracji interfejsu lub deklaracji elementu członkowskiego danych. Nie można jednak użyć słowa kluczowego __event
, aby zakwalifikować składową klasy zagnieżdżonej.
W zależności od tego, czy źródło zdarzeń i odbiornik są natywne dla języka C++, COM lub zarządzanego (.NET Framework), można użyć następujących konstrukcji jako zdarzeń:
Natywny język C++ | Model COM | Zarządzane (.NET Framework) |
---|---|---|
funkcja składowa | - | metoda |
- | interfejs | - |
- | - | składowa danych |
Użyj __hook
w odbiorniku zdarzeń, aby skojarzyć funkcję składową programu obsługi z funkcją składową zdarzenia. Po utworzeniu zdarzenia za pomocą słowa kluczowego __event
wszystkie programy obsługi zdarzeń przyłączone do tego zdarzenia są następnie wywoływane po wywołaniu zdarzenia.
Deklaracja __event
funkcji składowej nie może mieć definicji; definicja jest niejawnie generowana, więc funkcja składowa zdarzenia może być wywoływana tak, jakby była to dowolna zwykła funkcja składowa.
Uwaga
Klasa lub struktura szablonu nie może zawierać zdarzeń.
Zdarzenia natywne
Zdarzenia natywne są funkcjami składowych. Zwracany typ jest zwykle HRESULT
lub void
, ale może być dowolnym typem całkowitym enum
, w tym . Gdy zdarzenie używa typu zwracanego całkowitego, warunek błędu jest definiowany, gdy program obsługi zdarzeń zwraca wartość niezerową. W takim przypadku zdarzenie, które jest wywoływane, wywołuje innych delegatów.
// Examples of native C++ events:
__event void OnDblClick();
__event HRESULT OnClick(int* b, char* s);
Zobacz Obsługa zdarzeń w natywnym języku C++ , aby uzyskać przykładowy kod.
Zdarzenia COM
Zdarzenia COM to interfejsy. Parametry funkcji składowej w interfejsie źródła zdarzeń powinny być w parametrach, ale nie jest rygorystycznie wymuszane. Jest to spowodowane tym, że parametr out nie jest przydatny podczas multiemisji. Jeśli używasz parametru out , zostanie wyświetlone ostrzeżenie poziomu 1.
Zwracany typ jest zazwyczaj HRESULT
lub void
, ale może być dowolnym typem całkowitym, w tym enum
. Gdy zdarzenie używa typu zwracanego całkowitego i program obsługi zdarzeń zwraca wartość niezerową, jest to warunek błędu. Zdarzenie wywoływane przerywa wywołania do innych delegatów. Kompilator automatycznie oznacza interfejs źródła zdarzeń jako source
element w wygenerowanym języku IDL.
Słowo __interface
kluczowe jest zawsze wymagane po __event
źródle zdarzeń COM.
// Example of a COM event:
__event __interface IEvent1;
Zobacz Obsługa zdarzeń w modelu COM , aby uzyskać przykładowy kod.
Zdarzenia zarządzane
Aby uzyskać informacje na temat kodowania zdarzeń w nowej składni, zobacz zdarzenie.
Zdarzenia zarządzane to elementy członkowskie danych lub funkcje członkowskie. W przypadku użycia ze zdarzeniem zwracany typ delegata musi być zgodny ze specyfikacją języka wspólnego. Zwracany typ programu obsługi zdarzeń musi być zgodny z typem zwrotnym delegata. Aby uzyskać więcej informacji na temat delegatów, zobacz Delegaty i zdarzenia. Jeśli zdarzenie zarządzane jest elementem członkowskim danych, jego typ musi być wskaźnikiem do delegata.
W programie .NET Framework można traktować element członkowski danych tak, jakby był to sama metoda (czyli Invoke
metoda odpowiadającego mu delegata). W tym celu należy wstępnie zdefiniować typ delegata do deklarowania elementu członkowskiego danych zdarzeń zarządzanych. Z kolei metoda zdarzenia zarządzanego niejawnie definiuje odpowiedni delegat zarządzany, jeśli nie jest jeszcze zdefiniowany. Można na przykład zadeklarować wartość zdarzenia, taką jak OnClick
zdarzenie w następujący sposób:
// Examples of managed events:
__event ClickEventHandler* OnClick; // data member as event
__event void OnClick(String* s); // method as event
W przypadku niejawnego deklarowania zdarzenia zarządzanego można określić add
metody i remove
metody dostępu, które są wywoływane po dodaniu lub usunięciu procedur obsługi zdarzeń. Można również zdefiniować funkcję składową, która wywołuje (wywołuje) zdarzenie spoza klasy.
Przykład: Zdarzenia natywne
// EventHandling_Native_Event.cpp
// compile with: /c
[event_source(native)]
class CSource {
public:
__event void MyEvent(int nValue);
};
Przykład: zdarzenia COM
// EventHandling_COM_Event.cpp
// compile with: /c
#define _ATL_ATTRIBUTES 1
#include <atlbase.h>
#include <atlcom.h>
[ module(dll, name="EventSource", uuid="6E46B59E-89C3-4c15-A6D8-B8A1CEC98830") ];
[ dual, uuid("00000000-0000-0000-0000-000000000002") ]
__interface IEventSource {
[id(1)] HRESULT MyEvent();
};
[ coclass, uuid("00000000-0000-0000-0000-000000000003"), event_source(com) ]
class CSource : public IEventSource {
public:
__event __interface IEventSource;
HRESULT FireEvent() {
__raise MyEvent();
return S_OK;
}
};
Zobacz też
Słowa kluczowe
Obsługa zdarzeń
event_source
event_receiver
__hook
__unhook
__raise
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla