代表与职能的召唤

时间:2015-05-13 15:57:14

标签: vb.net delegates

有人可以解释为什么我会这样做这个代码吗? 我对代表有一点把握,但不了解其优点 有人可以尝试并帮助解释我在这里做的事情。我是班级和代表的新手。只是需要一些帮助。 这是我的委托代码

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click
        Dim NewCompare As New Compare
        NewCompare.Num1 = 3
        NewCompare.Num2 = 2

        NewCompare.CheckCompare(AddressOf GreaterThan)
        NewCompare.CheckCompare(AddressOf SmallerThan)
    End Sub

    Function GreaterThan(Num1 As Integer, Num2 As Integer) As Boolean
        Return Num1 > Num2
    End Function

    Function SmallerThan(Num1 As Integer, Num2 As Integer) As Boolean
        Return Num1 < Num2
    End Function
End Class

Class Compare
    Property Num1 As Integer
    Property Num2 As Integer

    Delegate Function CompareValues(Num1 As Integer, Num2 As Integer) As Boolean

    Public Sub CheckCompare(compare As CompareValues)
        If compare(_Num1, _Num2) Then
            MsgBox(_Num1)
        Else
            MsgBox(_Num2)
        End If
    End Sub
End Class

1 个答案:

答案 0 :(得分:1)

嗯,“代表团”的“基本理念”很简单:“识别你可以问的其他人。”

在此示例中,Compare类存在以“比较两个对象”。但是你已经说过,委托对其他一些不属于自己定义的函数的责任。此外,您确切地指定了可接受的“委托函数”必须是什么样的。

Delegate Function声明指定该委托必须是什么样的。 “可接受的委托必须返回Boolean,并且必须接受(确切地......)两个Integer参数。”该语言在编译时确保此是这样。

在您的两个单独调用CheckCompare类的Compare方法中,您提供了对两个函数GreaterThanLessThan的单独引用,这两个函数都是符合Delegate Function声明中规定的限制。因此,该语言允许它们在调用中使用。并且,按照指示,CheckCompare方法会在被告知时调用它已被赋予的委托函数。

它不知道(但是,它并不关心) 委托它。该语言确保提供了“可接受的委托”,并且所有方法需要做的是调用“它”。