如何向“事件”/委托添加“事件”?语法是什么? 在C++/CLI和C#中是否相同?
如何向“事件”/委托添加“事件”?语法是什么? 在C++/CLI和C#中是否相同?
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参数args)作为基础委托:
ref class EventReceiver {
public:
void Handler(Object^ sender, MyEventArgs^ e) { }
};
myEventSource->MyEvent += gcnew EventHandler<MyEventArgs^>(this, &EventReceiver::DataReceived);
在 c# 中,您可以使用 +=
操作符来实现:
someObj.SomeEvent += new EventHandler(Blah_SomeEvent);
...
private void Blah_SomeEvent(object sender, EventArgs e)
{
}
自从我发布这个答案以来已经过了很长时间,有人提醒我可能是错误的。我真的不知道为什么原始问题发布者把我的答案标记为正确的(也许他们正在寻找这个而不是c++-cli的语法?现在谁知道呢).
无论如何,在c++-cli中应该是这样的:
someObj->SomeEvent+= gcnew EventHandler(this, &Blah_SomeEvent);
C++/CLI 的语法如下:
delegate void MyOwnEventHandler(Object^ sender, Eventargs^ e)
{
}
要注册参加活动:
objectPtr->MyEvent += gcnew EventHandler(MyOwnEventHandler);