.NET:& function_name语法

时间:2012-01-01 07:14:26

标签: .net delegates c++-cli

语法&function_name是什么意思?

例如,在委托中使用

System::ComponentModel::DoWorkEventHandler(this, &Form1::DoWorkEvent)
与用BackgroundWorker对象进行事件处理时使用的

委托原型是

public delegate void DoWorkEventHandler(Object^ sender, DoWorkEventArgs^ e)

据推测,这意味着&Form1::DoWorkEvent会返回DoWorkEventArgs个对象?但这没有多大意义。

2 个答案:

答案 0 :(得分:3)

System::ComponentModel::DoWorkEventHandler(this, &Form1::DoWorkEvent) 创建委托。创建委托的语法是gcnew delegatename(thisObject, functionPointer)。它会创建一个委托,在functionPointer设置为this的情况下调用thisObject

调用委托,您可以使用适当的参数调用它。 delegateVariable->Invoke(parameter1, parameter2, etc)。对于DoWorkEventHandlerparameter1senderparameter2e

你混淆了两个不同的东西,创造和调用。第DoWorkEventHandler(this, &Form1::DoWorkEvent)行创建了一个委托。这两个参数是thisObjectfunctionPointer,而不是sendere

这应该包含在您首先了解代表的任何书籍/资源中。例如,this article

  

创建委托实例涉及调用构造函数。如果你   正在封装一个静态函数,你传入一个参数,a   指向该成员函数的指针。对于实例函数,您必须   传递两个参数:该实例的句柄,以及指向的实例   实例成员函数。

答案 1 :(得分:0)

我的C ++非常生疏,但我认为你根本不看.NET,而是标准的C ++成员函数指针。