传递方法作为委托参数问题

时间:2013-08-20 20:37:22

标签: vb.net methods constructor delegates

我习惯用C#编程,所以我不知道如何处理委托并在VB中传递方法

我得到的错误是:Argument not specified for parameter 'message' of 'Public Sub ReceiveMessage(message As String)'

以下是我要传递给的类的构造函数:

Delegate Sub ReceiveDelegate(message As String)
Public ReceiveMethod As ReceiveDelegate

Sub New(ByRef receive As ReceiveDelegate)
    ReceiveMethod = receive
End Sub

这是我尝试传递给该构造函数的方法:

Public Sub ReceiveMessage(message As String)
        MessageBox.Show(message)
End Sub

我正在使用它:

Dim newClass As New Class(ReceiveMessage)

这样做的目的是,一旦类从网络设备接收数据,它就可以异步调用Form上的相应方法。

1 个答案:

答案 0 :(得分:1)

您需要创建委托对象并使用AddressOf运算符,如下所示:

Dim newClass As New Class(New ReceiveDelegate(ReceiveMessage))

但是,如果您没有显式创建委托对象,VB.NET将根据签名自动确定正确的类型,并为您创建,所以您可以这样做:

Dim newClass As New Class(AddressOf ReceiveMessage)

后者显然不那么打字,但前者更明确。所以,请选择。这两种方式都是完全可以接受和普遍的。