Comparison method based on delegate : Delegate « Class Module « VB.Net Tutorial






Module Module1
    Class Employee
        Public FirstNme As String
        Public LastName As String
        Public Title As String
        Public Salary As Double

        Public Sub New(ByVal LastName As String, ByVal FirstNme As String, _
          ByVal Title As String, ByVal Salary As Double)
            Me.FirstNme = FirstNme
            Me.LastName = LastName
            Me.Title = Title
            Me.Salary = Salary
        End Sub

    End Class

    Delegate Function Compare(ByVal A As Employee, ByVal B As Employee) As Boolean

    Dim CompareMethod As New Compare(AddressOf CompareTitle)

    Function CompareTitle(ByVal A As Employee, ByVal B As Employee) As Boolean
        If (A.Title < B.Title) Then
            CompareTitle = False
        Else
            CompareTitle = True
        End If
    End Function

    Function CompareLastName(ByVal A As Employee, ByVal B As Employee) As Boolean
        If (A.LastName < B.LastName) Then
            CompareLastName = False
        Else
            CompareLastName = True
        End If
    End Function

    Function CompareSalary(ByVal A As Employee, ByVal B As Employee) As Boolean
        If (A.Salary < B.Salary) Then
            CompareSalary = False
        Else
            CompareSalary = True
        End If
    End Function

    Public Sub SortList(ByVal Employeelist() As Employee)
        Dim I, J As Integer
        Dim Temp As Employee

        For I = 0 To Employeelist.Length - 2
            For J = I + 1 To Employeelist.Length - 1
                If (CompareMethod(Employeelist(I), Employeelist(J))) Then
                    Temp = Employeelist(I)
                    Employeelist(I) = Employeelist(J)
                    Employeelist(J) = Temp
                End If
            Next
        Next
    End Sub

    Sub Main()
        Dim EmployeeList(3) As Employee

        EmployeeList(0) = New Employee("A","Z", "W", 49.99)

        EmployeeList(1) = New Employee("Z","A", "J", 49.99)

        EmployeeList(2) = New Employee("B", "X", "K", 49.99)

        EmployeeList(3) = New Employee("P","O", "A", 39.99)

        SortList(EmployeeList)

        Console.WriteLine("By Title")

        Dim EmployeeEntry As Employee
        For Each EmployeeEntry In EmployeeList
            Console.WriteLine(EmployeeEntry.LastName & " " & EmployeeEntry.Title & " " & EmployeeEntry.Salary)
        Next

        Console.WriteLine("By LastName")

        CompareMethod = AddressOf CompareLastName
        SortList(EmployeeList)
        For Each EmployeeEntry In EmployeeList
            Console.WriteLine(EmployeeEntry.LastName & " " & EmployeeEntry.Title & " " & EmployeeEntry.Salary)
        Next

        Console.WriteLine("By Salary")

        CompareMethod = AddressOf CompareSalary
        SortList(EmployeeList)
        For Each EmployeeEntry In EmployeeList
            Console.WriteLine(EmployeeEntry.LastName & " " & EmployeeEntry.Title & " " & EmployeeEntry.Salary)
        Next
    End Sub
End Module
By Title
P A 39.99
Z J 49.99
B K 49.99
A W 49.99
By LastName
A W 49.99
B K 49.99
P A 39.99
Z J 49.99
By Salary
P A 39.99
Z J 49.99
B K 49.99
A W 49.99








6.28.Delegate
6.28.1.Define delegate
6.28.2.Define a delegate to be a pointer to a subroutine that has a string parameter.
6.28.3.Use Delegate Sub
6.28.4.Delegate Function
6.28.5.Uses delegates to sort random numbers (ascending or descending)
6.28.6.Use AddressOf to assign function to a delegate
6.28.7.Comparison method based on delegate
6.28.8.Multiple Delegates
6.28.9.Math delegation
6.28.10.Use one Delegate to reference two different functions
6.28.11.Reference a method that has one parameter and returns a value: Func<(Of <(T, TResult>)>)