položky __Event
Deklaruje událost.
__event method-declarator;
__event __interface interface-specifier;
__event member-declarator;
Poznámky
Klíčové slovo __event deklarace metody, deklaraci rozhraní nebo prohlášení členských dat lze použít.Nelze však použít __event klíčové slovo využívat členem vnořené třídy.
Podle toho, zda zdroj události a příjemce jsou nativního C++, COM nebo spravované (rozhraní.NET Framework) můžete použít následující konstrukce jako události:
Nativní C++ |
COM |
Spravované (rozhraní.NET Framework) |
---|---|---|
Metoda |
— |
Metoda |
— |
rozhraní |
— |
— |
— |
datový člen |
Použití __hook v příjemce události přidružit metody zpracování události metodu.Všimněte si, že po vytvoření události, která __event klíčové slovo, všechny obslužné rutiny událostí, které následně připojený k této události bude volána, když je zavolána událost.
__event Deklarace metody nemohou mít definice; definice je implicitně generován, takže lze volat metody událostí, jako kdyby byla běžným způsobem.
[!POZNÁMKA]
Události nemohou obsahovat podle šablony třídy nebo struct.
Nativní události
Nativní události jsou metody.Návratový typ je obvykle HRESULT nebo void, ale může být integrálního typu, včetně enum.Při události používá nedílnou návratový typ, je definována chybovou podmínku obslužné rutiny události vrátí nenulovou hodnotu, ve které bude případ závažné události volání jiných delegátů.
// Examples of native C++ events:
__event void OnDblClick();
__event HRESULT OnClick(int* b, char* s);
Viz Zpracování událostí v jazyce C++ nativní ukázkový kód.
Události COM
Události COM jsou rozhraní.Parametry metody v zdrojové rozhraní událostí by měla být v parametry (ale není to přísně vynutit), protože podle parametr není užitečná při vysílání.Bude vydáno upozornění úrovně 1, pokud použijete podle parametr.
Návratový typ je obvykle HRESULT nebo void, ale může být integrálního typu, včetně enum.Při události používá nedílnou návratový typ a obslužné rutiny události vrátí nenulovou hodnotu, je chybový stav, ve kterém přeruší případ závažné události volání jiných delegátů.Všimněte si, že kompilátor automaticky označit jako zdrojové rozhraní událostí zdroje v generovaných IDL.
__Interface klíčové slovo je vždy požadována po __event pro zdroj události COM.
// Example of a COM event:
__event __interface IEvent1;
Viz Zpracování událostí v COM ukázkový kód.
Spravované události
Informace o kódování události v novou syntaxi, události (Visual C++).
Spravované události jsou datové členy nebo metody.Při použití s událostí, musí být kompatibilní s návratový typ delegáta Specifikace CLS.Návratový typ obslužné rutiny události musí odpovídat návratový typ delegáta.Další informace o Delegáti viz __delegate.Pokud datový člen spravované události, její typ musí být ukazatel delegátovi.
V rozhraní.NET Framework můžete zacházet člena, jako kdyby metoda sám (, Invoke metoda jeho odpovídající delegáta).Pro deklarování datový člen spravované události musí předdefinovat typ delegáta.Metoda spravované události naopak implicitně definuje odpovídající spravované delegát již nebude definován.Například můžete deklarovat hodnotu událostí jako OnClick jako událost takto:
// Examples of managed events:
__event ClickEventHandler* OnClick; // data member as event
__event void OnClick(String* s); // method as event
Při deklarování implicitně spravované události, můžete přidat a odebrat přístupové objekty, které bude volána při přidání nebo odebrání obslužné rutiny událostí.Můžete také definovat metodu, která volá (vznese) události z vnějšku třídy.
Příklad: Nativní události
// EventHandling_Native_Event.cpp
// compile with: /c
[event_source(native)]
class CSource {
public:
__event void MyEvent(int nValue);
};
Příklad: Události 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;
}
};
Příklad: Spravované události
// EventHandling_Managed_Event.cpp
// compile with: /clr:oldSyntax /c
using namespace System;
[event_source(managed)]
public __gc class CPSource {
public:
__event void MyEvent(Int16 nValue);
};
Při použití atributu na událost, můžete určit, že atribut použije generované metod nebo metoda Invoke generované delegáta.Výchozí (event:) se použije atribut události.
// EventHandling_Managed_Event_2.cpp
// compile with: /clr:oldSyntax /c
using namespace System;
[attribute(All, AllowMultiple=true)]
public __gc class Attr {};
public __delegate void D();
public __gc class X {
public:
[method:Attr] __event D* E;
[returnvalue:Attr] __event void noE();
};