1:如果事件的底层委托是您自己定义的自定义委托,它是类成员(来自MSDN 的示例):
delegate void Del(int, float);
ref class EventReceiver {
public:
void Handler(int i , float f) { }
};
myEventSource->MyEvent += gcnew Del(myEventReceiver, &EventReceiver::Handler);
2:如果底层委托是全局处理程序并且具有 .NET 事件(对象 + 事件参数)的标准签名(来自 DPD 答案):
delegate void MyOwnEventHandler(Object^ sender, EventArgs^ e) { }
myEventSource->MyEvent += gcnew EventHandler(MyOwnEventHandler);
3:如果底层委托具有 .NET 事件的标准签名并且事件处理程序是类方法:
ref class EventReceiver {
public:
void Handler(Object^ sender, EventArgs^ e) { }
};
myEventSource->MyEvent += gcnew EventHandler(myEventReceiver, &EventReceiver::Handler);
4:使用 System::EventHandler generic(接受 MyEventArgs args 参数)作为底层委托:
ref class EventReceiver {
public:
void Handler(Object^ sender, MyEventArgs^ e) { }
};
myEventSource->MyEvent += gcnew EventHandler<MyEventArgs^>(this, &EventReceiver::DataReceived);