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)

これの目的は、クラスがネットワーク デバイスからデータを受信すると、フォームの対応するメソッドを非同期的に呼び出すことができるようにすることです。

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 に答える