Language Basics VB.Net

Imports System
Public Class MainClass
    Shared Sub Main(  )
             Dim Student1 As New Student("Student1")
             Dim Student2 As New Student("Student2")
             Dim Employee1 As New Employee(65)
             Dim Employee2 As New Employee(12)
             Dim studentPair As New Pair(Student1, Student2)
             Dim employeePair As New Pair(Employee1, Employee2)
             Console.WriteLine("studentPair: {0}", _
                 studentPair.ToString(  ))
             Console.WriteLine("employeePair: {0}", _
                 employeePair.ToString(  ))
             Dim theStudentDelegate As New _
               Pair.WhichIsSmaller(AddressOf Student.WhichStudentIsSmaller)
             Dim theEmployeeDelegate As New _
               Pair.WhichIsSmaller(AddressOf Employee.WhichEmployeeIsSmaller)
             studentPair.Sort(theStudentDelegate)
             Console.WriteLine("After Sort studentPair: {0}", _
                 studentPair.ToString(  ))
             studentPair.ReverseSort(theStudentDelegate)
             Console.WriteLine("After ReverseSort studentPair: {0}", _
                 studentPair.ToString(  ))
             employeePair.Sort(theEmployeeDelegate)
             Console.WriteLine("After Sort employeePair: {0}", _
                 employeePair.ToString(  ))
             employeePair.ReverseSort(theEmployeeDelegate)
             Console.WriteLine("After ReverseSort employeePair: {0}", _
                 employeePair.ToString(  ))
    
    End Sub 'Main
   
End Class
     Public Enum Comparison
         theFirst = 1
         theSecond = 2
     End Enum
     Public Class Pair
         Private thePair(2) As Object
         Public Delegate Function WhichIsSmaller(ByVal obj1 As Object, ByVal obj2 As Object) As Comparison
         Public Sub New(ByVal firstObject As Object,ByVal secondObject As Object)
             thePair(0) = firstObject
             thePair(1) = secondObject
         End Sub
         Public Sub Sort(ByVal theDelegatedFunc As WhichIsSmaller)
             If theDelegatedFunc(thePair(0), thePair(1)) = _
                Comparison.theSecond Then
                 Dim temp As Object = thePair(0)
                 thePair(0) = thePair(1)
                 thePair(1) = temp
             End If
         End Sub
         Public Sub ReverseSort(ByVal theDelegatedFunc As WhichIsSmaller)
             If theDelegatedFunc(thePair(0), thePair(1)) = _
                    Comparison.theFirst Then
                 Dim temp As Object = thePair(0)
                 thePair(0) = thePair(1)
                 thePair(1) = temp
             End If
         End Sub
         Public Overrides Function ToString(  ) As String
             Return thePair(0).ToString(  ) & ", " & thePair(1).ToString(  )
         End Function
     End Class
     Public Class Employee
         Private weight As Integer
         Public Sub New(ByVal weight As Integer)
             Me.weight = weight
         End Sub
         Public Shared Function WhichEmployeeIsSmaller(ByVal o1 As Object, ByVal o2 As Object) As Comparison
             Dim d1 As Employee = DirectCast(o1, Employee)
             Dim d2 As Employee = DirectCast(o2, Employee)
             If d1.weight > d2.weight Then
                 Return Comparison.theSecond
             Else
                 Return Comparison.theFirst
             End If
         End Function
         Public Overrides Function ToString(  ) As String
             Return weight.ToString(  )
         End Function
     End Class
     Public Class Student
         Private name As String
         Public Sub New(ByVal name As String)
             Me.name = name
         End Sub
         Public Shared Function WhichStudentIsSmaller( _
           ByVal o1 As Object, ByVal o2 As Object) As Comparison
             Dim s1 As Student = DirectCast(o1, Student)
             Dim s2 As Student = DirectCast(o2, Student)
             If String.Compare(s1.name, s2.name) < 0 Then
                 Return Comparison.theFirst
             Else
                 Return Comparison.theSecond
             End If
         End Function
         Public Overrides Function ToString(  ) As String
             Return name
         End Function
     End Class