1

我习惯用 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 上的相应方法。

4

1 回答 1

1

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

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

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

Dim newClass As New Class(AddressOf ReceiveMessage)

后者显然更少打字,但前者更明确。所以,任君挑选。这两种方式都是完全可以接受和普遍的。

于 2013-08-20T20:57:34.413 回答