【问题标题】:.NET: &function_name syntax.NET:&function_name 语法
【发布时间】:2012-01-01 07:14:25
【问题描述】:

&function_name 的语法是什么意思?

例如,在委托中使用

System::ComponentModel::DoWorkEventHandler(this, &Form1::DoWorkEvent)

BackgroundWorker 对象的事件处理一起使用。

委托原型是

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

大概这意味着&Form1::DoWorkEvent返回一个DoWorkEventArgs对象?但这没有多大意义。

【问题讨论】:

  • 如果 c# 显然是 C++/CLI 独有的语法,为什么还要标记它?
  • 这个概念看起来与 C# 中的概念相似(至少乍一看),所以我想我会标记它以获得 C# 程序员的输入。如果概念不同,我很抱歉。
  • 您询问的是特定语法,而不是基本概念。而且语法不同的

标签: .net delegates c++-cli


【解决方案1】:

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 表示

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

【讨论】:

    【解决方案2】:

    我的 C++ 相当生锈,但我认为您根本不是在看 .NET,而是在看标准 C++ 成员函数指针。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多