2013-08-20 53 views
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) 

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

+1

这就是C#代码,VB.NET强制您使用AddressOf运算符。 –

+0

原来,这是我所需要的,应该写一个答案!我在VB中指出了自己在VB中的缺乏经验:P –

回答

1

您需要创建委托对象,并使用AddressOf运营商,像这样:

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

但是,如果你不明确创建委托对象,VB.NET将自动确定正确的类型,基于签名,并为您创建它,所以你可以做这样的:

Dim newClass As New Class(AddressOf ReceiveMessage) 

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

+1

太棒了!添加AddressOf工作! –