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 (который принимает параметр аргумента MyEventArgs) в качестве основного делегата:
ref class EventReceiver {
public:
void Handler(Object^ sender, MyEventArgs^ e) { }
};
myEventSource->MyEvent += gcnew EventHandler<MyEventArgs^>(this, &EventReceiver::DataReceived);