如何将“事件”添加到“事件”/委托?语法是什么? 它在C ++ / CLI和C#中是一样的吗?
答案 0 :(得分:12)
1:如果事件的underlyng delgate是自定义的,那么你定义自己是一个类memeber(来自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事件的标准签名(object + event args)(来自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 args参数)作为底层委托:
ref class EventReceiver {
public:
void Handler(Object^ sender, MyEventArgs^ e) { }
};
myEventSource->MyEvent += gcnew EventHandler<MyEventArgs^>(this, &EventReceiver::DataReceived);
答案 1 :(得分:11)
在c#中,您可以使用+=
运算符执行此操作:
someObj.SomeEvent += new EventHandler(Blah_SomeEvent);
...
private void Blah_SomeEvent(object sender, EventArgs e)
{
}
我发布这个答案已经很久了,有人注意到我可能是错的。我真的不知道为什么OP标记我的答案是正确的(也许OP正在寻找这个而不是c++-cli语法?现在谁知道了)。
无论如何,在c++-cli中,它将是:
someObj->SomeEvent+= gcnew EventHandler(this, &Blah_SomeEvent);
答案 2 :(得分:6)
C ++ / CLI的语法是:
delegate void MyOwnEventHandler(Object^ sender, Eventargs^ e)
{
}
为活动注册:
objectPtr->MyEvent += gcnew EventHandler(MyOwnEventHandler);