event SampleEventHandler^ SampleEvent;
event宣言時にトラッキング ハンドル (^) を付けず、
event SampleEventHandler SampleEvent;
のように宣言すると、「イベントの種類は handle-to-delegate 型である必要があります」としてエラーとなります。
delegate void SampleEventHandler(Object^ source, EventArgs^ e); ref class MyClass { public: event SampleEventHandler^ CustomEvent; void Func() { // if(CustomEvent != nullptr) // ※1 { CustomEvent(this, EventArgs::Empty); } } };
※1 C#とは異なり、イベント発生時にそれが登録されているメソッドの存在を確認できません。nullptrと比較しようとすると、「error C3918: 使用するには、'MyClass::CustomEvent' がデータ メンバーでなければなりません」としてエラーとなります。c++ cli - Does C++/CLI event have any listeners? - Stack Overflow
ref class Handler { public: Handler() { MyClass^ myClass = gcnew MyClass(); myClass->CustomEvent += gcnew SampleEventHandler(this, &Handler::Callback); myClass->Func(); } void Callback(Object^ source, EventArgs^ e) { } };