1

以下のコードをご覧ください。

Public Delegate Sub TestButtonClick(ByVal test As Integer)

Public Class Person
    Private Name As String
    Private ID As Integer
    Public Event ButtonClick As TestButtonClick

    Public Sub DelegateTest1(ByVal Test As Integer)
        MsgBox(Test)
    End Sub

    Public Sub ChangeName()
        RaiseEvent ButtonClick(1)
    End Sub

    Public Sub DelegateTest2()
        MsgBox("Delegate Test 2")
    End Sub

    Public Sub DelegateTest3()
        MsgBox("Delegate Test 3")
    End Sub

End Class

Public Class Form1
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim p1 As Person = New Person
        AddHandler p1.ButtonClick, AddressOf p1.DelegateTest1
        AddHandler p1.ButtonClick, AddressOf p1.DelegateTest2
        AddHandler p1.ButtonClick, AddressOf p1.DelegateTest3
        p1.ChangeName()
    End Sub
End Class

出力は次のとおりです。

1
DelegateTest2
DelegateTest3

このアプリケーションがコンパイルされる理由がわかりません。つまり、デリゲートは署名で整数を受け入れますが、受け入れPerson.DelegateTest2ませPerson.DelegateTest3ん。

Person.DelegateTest2() を次のように変更すると、予想どおりエラーが発生します。

Public Sub DelegateTest2(ByVal Test As Integer, ByVal Test2 As Integer)
        MsgBox("Delegate Test 2")
    End Sub

デリゲートに引数がある場合、つまり私の場合は整数を渡すことができるのはなぜですか?

4

1 に答える 1

2

VB.NET は最愛の VB からすべての遺産を受け継いでいることを忘れないでください。以下をファイルの先頭に追加することで、厳密にすることができます。これにより、ハイブリッドのがらくたではなく、実際の .NET プログラミング言語として動作します。

Option Strict On

またdefault option、荒野にいることに気付かないように、これを に設定することをお勧めします。

于 2013-02-17T12:40:52.007 に答える