<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net%2FLanguage_Basics%2FDelegate</id>
		<title>VB.Net/Language Basics/Delegate - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.vbex.ru/index.php?action=history&amp;feed=atom&amp;title=VB.Net%2FLanguage_Basics%2FDelegate"/>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/Language_Basics/Delegate&amp;action=history"/>
		<updated>2026-04-06T00:10:06Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net/Language_Basics/Delegate&amp;diff=276&amp;oldid=prev</id>
		<title> в 16:40, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/Language_Basics/Delegate&amp;diff=276&amp;oldid=prev"/>
				<updated>2010-05-26T16:40:06Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 16:40, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.vbex.ru/index.php?title=VB.Net/Language_Basics/Delegate&amp;diff=277&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.vbex.ru/index.php?title=VB.Net/Language_Basics/Delegate&amp;diff=277&amp;oldid=prev"/>
				<updated>2010-05-26T12:42:30Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Delegate Demo for a Simple Class==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Diagnostics&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Private Delegate Function NumEmployeesDelegate() As Integer&lt;br /&gt;
    Shared Sub Main()&lt;br /&gt;
        Dim emp As New Employee(&amp;quot;Rod&amp;quot;, &amp;quot;Stephens&amp;quot;)&lt;br /&gt;
        Dim show_num As NumEmployeesDelegate&lt;br /&gt;
    &lt;br /&gt;
        show_num = AddressOf Employee.GetNumEmployees&lt;br /&gt;
        Console.WriteLine(show_num().ToString)&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
Public Class Employee&lt;br /&gt;
    &amp;quot; In a real application, this would return &lt;br /&gt;
    &amp;quot; some sort of array or collection&amp;quot;s size.&lt;br /&gt;
    Public Shared Function GetNumEmployees() As Integer&lt;br /&gt;
        Return 13&lt;br /&gt;
    End Function&lt;br /&gt;
    &amp;quot; The Employee&amp;quot;s first name.&lt;br /&gt;
    Private m_FirstName As String = &amp;quot;&amp;lt;first name&amp;gt;&amp;quot;&lt;br /&gt;
    Public Property FirstName() As String&lt;br /&gt;
        Get&lt;br /&gt;
            Return m_FirstName&lt;br /&gt;
        End Get&lt;br /&gt;
        Set(ByVal value As String)&lt;br /&gt;
            m_FirstName = value&lt;br /&gt;
        End Set&lt;br /&gt;
    End Property&lt;br /&gt;
    &amp;quot; The Employee&amp;quot;s last name.&lt;br /&gt;
    Private m_LastName As String = &amp;quot;&amp;quot;&lt;br /&gt;
    Public Property LastName() As String&lt;br /&gt;
        Get&lt;br /&gt;
            Return m_LastName&lt;br /&gt;
        End Get&lt;br /&gt;
        Set(ByVal value As String)&lt;br /&gt;
            m_LastName = value&lt;br /&gt;
        End Set&lt;br /&gt;
    End Property&lt;br /&gt;
    Public Sub New(ByVal first_name As String, ByVal last_name As String)&lt;br /&gt;
        m_FirstName = first_name&lt;br /&gt;
        m_LastName = last_name&lt;br /&gt;
    End Sub&lt;br /&gt;
    Public Overrides Function ToString() As String&lt;br /&gt;
        Return m_FirstName &amp;amp; &amp;quot; &amp;quot; &amp;amp; m_LastName&lt;br /&gt;
    End Function&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Delegate Syntax==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt;  &lt;br /&gt;
Option Strict On&lt;br /&gt;
Imports System.Collections.Generic&lt;br /&gt;
Module Program&lt;br /&gt;
    Sub Main()&lt;br /&gt;
        Dim list As New List(Of Integer)()&lt;br /&gt;
        list.AddRange(New Integer() {20, 1, 4, 8, 9, 44})&lt;br /&gt;
        Dim callback As New Predicate(Of Integer)(AddressOf IsEvenNumber)&lt;br /&gt;
        Dim evenNumbers As List(Of Integer) = list.FindAll(callback)&lt;br /&gt;
        For Each evenNumber As Integer In evenNumbers&lt;br /&gt;
            Console.WriteLine(evenNumber)&lt;br /&gt;
        Next&lt;br /&gt;
    End Sub&lt;br /&gt;
    Function IsEvenNumber(ByVal i As Integer) As Boolean&lt;br /&gt;
        Return (i Mod 2) = 0&lt;br /&gt;
    End Function&lt;br /&gt;
End Module&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Delegate with and without parameters==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Collections&lt;br /&gt;
&lt;br /&gt;
Delegate Sub DelegateWithStringSignature(ByVal S As String)&lt;br /&gt;
Delegate Sub DelegateWithNoParam()&lt;br /&gt;
public class MainClass&lt;br /&gt;
   Shared Sub Main()&lt;br /&gt;
        Dim c As New CalledClass()&lt;br /&gt;
        Dim o As New OtherCalledClass()&lt;br /&gt;
        Dim BadObject As New ObjectWithNoWriteMessage()&lt;br /&gt;
        Dim d1 As DelegateWithStringSignature&lt;br /&gt;
        Dim Params() As Object = {&amp;quot;DynamicParam&amp;quot;}&lt;br /&gt;
        &amp;quot; The two following lines are identical&lt;br /&gt;
        d1 = New DelegateWithStringSignature(AddressOf c.WriteMessage)&lt;br /&gt;
        d1.Invoke(&amp;quot;Test&amp;quot;)&lt;br /&gt;
        d1.DynamicInvoke(Params)&lt;br /&gt;
        d1 = AddressOf c.WriteMessage&lt;br /&gt;
        d1.Invoke(&amp;quot;Test&amp;quot;)&lt;br /&gt;
        d1.DynamicInvoke(Params)&lt;br /&gt;
   End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Class CalledClass&lt;br /&gt;
    Shared Sub SharedMessage(ByVal s As String)&lt;br /&gt;
        Console.WriteLine(&amp;quot;CalledClass.SharedMessage with parameter: &amp;quot; &amp;amp; s)&lt;br /&gt;
    End Sub&lt;br /&gt;
    Public Sub WriteMessage(ByVal s As String)&lt;br /&gt;
        Console.WriteLine(&amp;quot;CalledClass WriteMessage method with parameter: &amp;quot; &amp;amp; s)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Class OtherCalledClass&lt;br /&gt;
    Sub WriteMessage(ByVal s As String)&lt;br /&gt;
        Console.WriteLine(&amp;quot;OtherCalledClass WriteMessage method with parameter: &amp;quot; &amp;amp; s)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Class ObjectWithNoWriteMessage&lt;br /&gt;
    Sub BadWriteMessage()&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Function Delegate: output string==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    &amp;quot; delegate to be a pointer to a subroutine&lt;br /&gt;
    &amp;quot; that has a string parameter.&lt;br /&gt;
    Private Delegate Sub StringDisplayerType(ByVal str As String)&lt;br /&gt;
    Shared Sub Main(ByVal args As String())&lt;br /&gt;
        Dim m_DisplayStringRoutine As StringDisplayerType&lt;br /&gt;
        &amp;quot; Assign the variable to a subroutine.&lt;br /&gt;
        m_DisplayStringRoutine = AddressOf ShowStringInMessageBox &lt;br /&gt;
        &amp;quot; Invoke the delegate&amp;quot;s subroutine.&lt;br /&gt;
        m_DisplayStringRoutine(&amp;quot;Hello world&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        m_DisplayStringRoutine = AddressOf ShowStringInOutputWindow&lt;br /&gt;
        &amp;quot; Invoke the delegate&amp;quot;s subroutine.&lt;br /&gt;
        m_DisplayStringRoutine(&amp;quot;Hello world&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
    End Sub&lt;br /&gt;
    Shared Private Sub ShowStringInOutputWindow(ByVal str As String)&lt;br /&gt;
        Console.WriteLine(str)&lt;br /&gt;
    End Sub&lt;br /&gt;
    Shared Private Sub ShowStringInMessageBox(ByVal str As String)&lt;br /&gt;
        Console.WriteLine(str)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Function Delegation Demo==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Dim emp As New Employee(&amp;quot;First Name&amp;quot;, &amp;quot;Last Name&amp;quot;)&lt;br /&gt;
    Private Delegate Function NumEmployeesDelegate() As Integer&lt;br /&gt;
    Shared Sub Main(ByVal args As String())&lt;br /&gt;
        Dim show_num As NumEmployeesDelegate&lt;br /&gt;
        show_num = AddressOf Employee.GetNumEmployees&lt;br /&gt;
        &lt;br /&gt;
        Console.WriteLine(show_num().ToString)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Public Class Employee&lt;br /&gt;
    Private m_FirstName As String&lt;br /&gt;
    Private m_LastName As String&lt;br /&gt;
    Private Shared m_NumEmployees As Integer = 0&lt;br /&gt;
    Public Shared Function GetNumEmployees() As Integer&lt;br /&gt;
        Return m_NumEmployees&lt;br /&gt;
    End Function&lt;br /&gt;
    Public Sub New(ByVal first_name As String, ByVal last_name As String)&lt;br /&gt;
        m_FirstName = first_name&lt;br /&gt;
        m_LastName = last_name&lt;br /&gt;
        m_NumEmployees += 1&lt;br /&gt;
    End Sub&lt;br /&gt;
    Public Overrides Function ToString() As String&lt;br /&gt;
        Return m_FirstName &amp;amp; &amp;quot; &amp;quot; &amp;amp; m_LastName&lt;br /&gt;
    End Function&lt;br /&gt;
    Private disposedValue As Boolean = False        &amp;quot; To detect redundant calls&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Multicast Delegate==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Shared Sub Main(  )&lt;br /&gt;
             Dim Writer, Logger As _&lt;br /&gt;
                MyClassWithDelegate.StringDelegate&lt;br /&gt;
             Dim myMulticastDelegate As MyClassWithDelegate.StringDelegate&lt;br /&gt;
             Writer = New MyClassWithDelegate.StringDelegate( _&lt;br /&gt;
                  AddressOf MyImplementingClass.WriteString)&lt;br /&gt;
             Logger = New MyClassWithDelegate.StringDelegate( _&lt;br /&gt;
                  AddressOf MyImplementingClass.LogString)&lt;br /&gt;
             Dim arr(  ) As MyClassWithDelegate.StringDelegate = _&lt;br /&gt;
                {Writer, Logger}&lt;br /&gt;
             Writer(&amp;quot;String passed to Writer&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
             Logger(&amp;quot;String passed to Logger&amp;quot; &amp;amp; vbCrLf)&lt;br /&gt;
             Console.WriteLine(vbCrLf &amp;amp; &amp;quot;myMulticastDelegate = &amp;quot; + _&lt;br /&gt;
                &amp;quot;Writer and Logger&amp;quot;)&lt;br /&gt;
             myMulticastDelegate = _&lt;br /&gt;
               DirectCast(System.Delegate.rubine(arr), _&lt;br /&gt;
                 MyClassWithDelegate.StringDelegate)&lt;br /&gt;
             myMulticastDelegate(&amp;quot;First string passed to Collector&amp;quot;)&lt;br /&gt;
             Console.WriteLine(vbCrLf &amp;amp; _&lt;br /&gt;
                &amp;quot;myMulticastDelegate Adds Transmitter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
             Console.WriteLine(vbCrLf &amp;amp; &amp;quot;myMulticastDelegate -= Logger&amp;quot;)&lt;br /&gt;
             myMulticastDelegate = _&lt;br /&gt;
                DirectCast(System.Delegate.Remove(myMulticastDelegate, _&lt;br /&gt;
                   Logger),  MyClassWithDelegate.StringDelegate)&lt;br /&gt;
             myMulticastDelegate(&amp;quot;Third string passed to Collector&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    End Sub &amp;quot;Main&lt;br /&gt;
   &lt;br /&gt;
End Class&lt;br /&gt;
     Public Class MyClassWithDelegate&lt;br /&gt;
         Public Delegate Sub StringDelegate(ByVal s As String)&lt;br /&gt;
     End Class&lt;br /&gt;
     Public Class MyImplementingClass&lt;br /&gt;
         Public Shared Sub WriteString(ByVal s As String)&lt;br /&gt;
             Console.WriteLine(&amp;quot;Writing string {0}&amp;quot;, s)&lt;br /&gt;
         End Sub&lt;br /&gt;
         Public Shared Sub LogString(ByVal s As String)&lt;br /&gt;
             Console.WriteLine(&amp;quot;Logging string {0}&amp;quot;, s)&lt;br /&gt;
         End Sub&lt;br /&gt;
     End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Register Delegates and call them==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Public Delegate Sub CallBackFunc()&lt;br /&gt;
    Private Shared m_cbFunc As CallBackFunc&lt;br /&gt;
    Public Shared Sub Main()&lt;br /&gt;
        RegisterDelegate(AddressOf CallBackHandler1)&lt;br /&gt;
        RegisterDelegate(AddressOf CallBackHandler2)&lt;br /&gt;
        CallDelegates()&lt;br /&gt;
    End Sub&lt;br /&gt;
    Shared Public Sub CallBackHandler1()&lt;br /&gt;
        Console.WriteLine(&amp;quot;Callback 1 returned &amp;quot;)&lt;br /&gt;
    End Sub&lt;br /&gt;
    Shared Public Sub CallBackHandler2()&lt;br /&gt;
        Console.WriteLine(&amp;quot;Callback 2 returned &amp;quot;)&lt;br /&gt;
    End Sub&lt;br /&gt;
    Shared Public Sub RegisterDelegate(ByRef cbFunc As CallBackFunc)&lt;br /&gt;
        m_cbFunc = CType(System.Delegate.rubine(m_cbFunc, cbFunc), CallBackFunc)&lt;br /&gt;
    End Sub&lt;br /&gt;
  &lt;br /&gt;
    Shared Public Sub CallDelegates()&lt;br /&gt;
        m_cbFunc()&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Simple Delegate Demo==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Public Delegate Sub StringSubDelegate(ByVal aString As String)&lt;br /&gt;
    Shared Sub Main()&lt;br /&gt;
        Dim test As New ClassForStringSubDelegate()&lt;br /&gt;
        Dim aDelegate As StringSubDelegate&lt;br /&gt;
        aDelegate = AddressOf test.TestSub&lt;br /&gt;
        aDelegate(&amp;quot;Hello&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        aDelegate = AddressOf test.TestMsgBox&lt;br /&gt;
        aDelegate(&amp;quot;Hello&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Public Class ClassForStringSubDelegate&lt;br /&gt;
    Public Sub TestSub(ByVal aString As String)&lt;br /&gt;
        Console.WriteLine(aString &amp;amp; aString)&lt;br /&gt;
    End Sub&lt;br /&gt;
    Public Sub TestMsgBox(ByVal aString As String)&lt;br /&gt;
        Console.WriteLine(&amp;quot;I am in a Message Box&amp;quot; &amp;amp; aString)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sort Delegate==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
   Shared Dim mBubbleSort As New CDelegateBubbleSort()&lt;br /&gt;
   Shared Dim mElementArray As Integer() = New Integer(9) {}&lt;br /&gt;
    &lt;br /&gt;
    Shared Sub Main(ByVal args As String())&lt;br /&gt;
      Dim randomNumber As Random = New Random()&lt;br /&gt;
      Dim i As Integer&lt;br /&gt;
      Console.WriteLine(&amp;quot;Init Value:&amp;quot;)&lt;br /&gt;
      &amp;quot; create String with 10 random numbers&lt;br /&gt;
      For i = 0 To mElementArray.GetUpperBound(0)&lt;br /&gt;
         mElementArray(i) = randomNumber.Next(100)&lt;br /&gt;
         Console.WriteLine( mElementArray(i) )&lt;br /&gt;
      Next&lt;br /&gt;
      mBubbleSort.SortArray(mElementArray, AddressOf SortAscending)&lt;br /&gt;
      Console.WriteLine(&amp;quot;Sort Ascending&amp;quot;)&lt;br /&gt;
      For i = 0 To mElementArray.GetUpperBound(0)&lt;br /&gt;
         Console.WriteLine( mElementArray(i) )&lt;br /&gt;
      Next&lt;br /&gt;
      mBubbleSort.SortArray(mElementArray, AddressOf SortDescending)&lt;br /&gt;
      Console.WriteLine(&amp;quot;Sort Descending&amp;quot;)&lt;br /&gt;
      For i = 0 To mElementArray.GetUpperBound(0)&lt;br /&gt;
         Console.WriteLine( mElementArray(i) )&lt;br /&gt;
      Next&lt;br /&gt;
    End Sub&lt;br /&gt;
&lt;br /&gt;
   &amp;quot; delegate implementation sorts in asending order&lt;br /&gt;
   Shared Private Function SortAscending(ByVal element1 As Integer, _&lt;br /&gt;
      ByVal element2 As Integer) As Boolean&lt;br /&gt;
      Return element1 &amp;gt; element2&lt;br /&gt;
   End Function &amp;quot; SortAscending&lt;br /&gt;
   &amp;quot; delegate implementation sorts in descending order&lt;br /&gt;
   Shared Private Function SortDescending(ByVal element1 As Integer, _&lt;br /&gt;
      ByVal element2 As Integer) As Boolean&lt;br /&gt;
      Return element1 &amp;lt; element2&lt;br /&gt;
   End Function &amp;quot; SortDescending&lt;br /&gt;
End Class&lt;br /&gt;
&lt;br /&gt;
Public Class CDelegateBubbleSort&lt;br /&gt;
   Public Delegate Function Comparator( _&lt;br /&gt;
      ByVal element1 As Integer, _&lt;br /&gt;
      ByVal element2 As Integer) As Boolean&lt;br /&gt;
   Public Sub SortArray(ByVal array As Integer(), _&lt;br /&gt;
      ByVal Compare As Comparator)&lt;br /&gt;
      Dim i, pass As Integer&lt;br /&gt;
      For pass = 0 To array.GetUpperBound(0)&lt;br /&gt;
         For i = 0 To array.GetUpperBound(0) - 1&lt;br /&gt;
            If Compare(array(i), array(i + 1)) Then&lt;br /&gt;
               Swap(array(i), array(i + 1))&lt;br /&gt;
            End If&lt;br /&gt;
         Next&lt;br /&gt;
      Next&lt;br /&gt;
   End Sub&lt;br /&gt;
   Private Sub Swap(ByRef firstElement As Integer, _&lt;br /&gt;
      ByRef secondElement As Integer)&lt;br /&gt;
      Dim hold As Integer&lt;br /&gt;
      hold = firstElement&lt;br /&gt;
      firstElement = secondElement&lt;br /&gt;
      secondElement = hold&lt;br /&gt;
   End Sub &amp;quot; Swap&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Two ways to init a Delegate==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Imports System.Collections&lt;br /&gt;
&lt;br /&gt;
Delegate Sub DelegateWithStringSignature(ByVal S As String)&lt;br /&gt;
Delegate Sub DelegateWithNoParam()&lt;br /&gt;
public class MainClass&lt;br /&gt;
   Shared Sub Main()&lt;br /&gt;
        Dim c As New CalledClass()&lt;br /&gt;
        Dim o As New OtherCalledClass()&lt;br /&gt;
        Dim BadObject As New ObjectWithNoWriteMessage()&lt;br /&gt;
        Dim d1 As DelegateWithStringSignature&lt;br /&gt;
        Dim Params() As Object = {&amp;quot;DynamicParam&amp;quot;}&lt;br /&gt;
        &amp;quot; The two following lines are identical&lt;br /&gt;
        d1 = New DelegateWithStringSignature(AddressOf c.WriteMessage)&lt;br /&gt;
        d1.Invoke(&amp;quot;Test&amp;quot;)&lt;br /&gt;
        d1.DynamicInvoke(Params)&lt;br /&gt;
        d1 = AddressOf c.WriteMessage&lt;br /&gt;
        d1.Invoke(&amp;quot;Test&amp;quot;)&lt;br /&gt;
        d1.DynamicInvoke(Params)&lt;br /&gt;
   End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Class CalledClass&lt;br /&gt;
    Shared Sub SharedMessage(ByVal s As String)&lt;br /&gt;
        Console.WriteLine(&amp;quot;CalledClass.SharedMessage with parameter: &amp;quot; &amp;amp; s)&lt;br /&gt;
    End Sub&lt;br /&gt;
    Public Sub WriteMessage(ByVal s As String)&lt;br /&gt;
        Console.WriteLine(&amp;quot;CalledClass WriteMessage method with parameter: &amp;quot; &amp;amp; s)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Class OtherCalledClass&lt;br /&gt;
    Sub WriteMessage(ByVal s As String)&lt;br /&gt;
        Console.WriteLine(&amp;quot;OtherCalledClass WriteMessage method with parameter: &amp;quot; &amp;amp; s)&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
Class ObjectWithNoWriteMessage&lt;br /&gt;
    Sub BadWriteMessage()&lt;br /&gt;
    End Sub&lt;br /&gt;
End Class&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use Delegate to implement custome sort==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;vbnet&amp;quot;&amp;gt; &lt;br /&gt;
Imports System&lt;br /&gt;
Public Class MainClass&lt;br /&gt;
    Shared Sub Main(  )&lt;br /&gt;
             Dim Student1 As New Student(&amp;quot;Student1&amp;quot;)&lt;br /&gt;
             Dim Student2 As New Student(&amp;quot;Student2&amp;quot;)&lt;br /&gt;
             Dim Employee1 As New Employee(65)&lt;br /&gt;
             Dim Employee2 As New Employee(12)&lt;br /&gt;
             Dim studentPair As New Pair(Student1, Student2)&lt;br /&gt;
             Dim employeePair As New Pair(Employee1, Employee2)&lt;br /&gt;
             Console.WriteLine(&amp;quot;studentPair: {0}&amp;quot;, _&lt;br /&gt;
                 studentPair.ToString(  ))&lt;br /&gt;
             Console.WriteLine(&amp;quot;employeePair: {0}&amp;quot;, _&lt;br /&gt;
                 employeePair.ToString(  ))&lt;br /&gt;
             Dim theStudentDelegate As New _&lt;br /&gt;
               Pair.WhichIsSmaller(AddressOf Student.WhichStudentIsSmaller)&lt;br /&gt;
             Dim theEmployeeDelegate As New _&lt;br /&gt;
               Pair.WhichIsSmaller(AddressOf Employee.WhichEmployeeIsSmaller)&lt;br /&gt;
             studentPair.Sort(theStudentDelegate)&lt;br /&gt;
             Console.WriteLine(&amp;quot;After Sort studentPair: {0}&amp;quot;, _&lt;br /&gt;
                 studentPair.ToString(  ))&lt;br /&gt;
             studentPair.ReverseSort(theStudentDelegate)&lt;br /&gt;
             Console.WriteLine(&amp;quot;After ReverseSort studentPair: {0}&amp;quot;, _&lt;br /&gt;
                 studentPair.ToString(  ))&lt;br /&gt;
             employeePair.Sort(theEmployeeDelegate)&lt;br /&gt;
             Console.WriteLine(&amp;quot;After Sort employeePair: {0}&amp;quot;, _&lt;br /&gt;
                 employeePair.ToString(  ))&lt;br /&gt;
             employeePair.ReverseSort(theEmployeeDelegate)&lt;br /&gt;
             Console.WriteLine(&amp;quot;After ReverseSort employeePair: {0}&amp;quot;, _&lt;br /&gt;
                 employeePair.ToString(  ))&lt;br /&gt;
    &lt;br /&gt;
    End Sub &amp;quot;Main&lt;br /&gt;
   &lt;br /&gt;
End Class&lt;br /&gt;
     Public Enum Comparison&lt;br /&gt;
         theFirst = 1&lt;br /&gt;
         theSecond = 2&lt;br /&gt;
     End Enum&lt;br /&gt;
     Public Class Pair&lt;br /&gt;
         Private thePair(2) As Object&lt;br /&gt;
         Public Delegate Function WhichIsSmaller(ByVal obj1 As Object, ByVal obj2 As Object) As Comparison&lt;br /&gt;
         Public Sub New(ByVal firstObject As Object,ByVal secondObject As Object)&lt;br /&gt;
             thePair(0) = firstObject&lt;br /&gt;
             thePair(1) = secondObject&lt;br /&gt;
         End Sub&lt;br /&gt;
         Public Sub Sort(ByVal theDelegatedFunc As WhichIsSmaller)&lt;br /&gt;
             If theDelegatedFunc(thePair(0), thePair(1)) = _&lt;br /&gt;
                Comparison.theSecond Then&lt;br /&gt;
                 Dim temp As Object = thePair(0)&lt;br /&gt;
                 thePair(0) = thePair(1)&lt;br /&gt;
                 thePair(1) = temp&lt;br /&gt;
             End If&lt;br /&gt;
         End Sub&lt;br /&gt;
         Public Sub ReverseSort(ByVal theDelegatedFunc As WhichIsSmaller)&lt;br /&gt;
             If theDelegatedFunc(thePair(0), thePair(1)) = _&lt;br /&gt;
                    Comparison.theFirst Then&lt;br /&gt;
                 Dim temp As Object = thePair(0)&lt;br /&gt;
                 thePair(0) = thePair(1)&lt;br /&gt;
                 thePair(1) = temp&lt;br /&gt;
             End If&lt;br /&gt;
         End Sub&lt;br /&gt;
         Public Overrides Function ToString(  ) As String&lt;br /&gt;
             Return thePair(0).ToString(  ) &amp;amp; &amp;quot;, &amp;quot; &amp;amp; thePair(1).ToString(  )&lt;br /&gt;
         End Function&lt;br /&gt;
     End Class&lt;br /&gt;
     Public Class Employee&lt;br /&gt;
         Private weight As Integer&lt;br /&gt;
         Public Sub New(ByVal weight As Integer)&lt;br /&gt;
             Me.weight = weight&lt;br /&gt;
         End Sub&lt;br /&gt;
         Public Shared Function WhichEmployeeIsSmaller(ByVal o1 As Object, ByVal o2 As Object) As Comparison&lt;br /&gt;
             Dim d1 As Employee = DirectCast(o1, Employee)&lt;br /&gt;
             Dim d2 As Employee = DirectCast(o2, Employee)&lt;br /&gt;
             If d1.weight &amp;gt; d2.weight Then&lt;br /&gt;
                 Return Comparison.theSecond&lt;br /&gt;
             Else&lt;br /&gt;
                 Return Comparison.theFirst&lt;br /&gt;
             End If&lt;br /&gt;
         End Function&lt;br /&gt;
         Public Overrides Function ToString(  ) As String&lt;br /&gt;
             Return weight.ToString(  )&lt;br /&gt;
         End Function&lt;br /&gt;
     End Class&lt;br /&gt;
     Public Class Student&lt;br /&gt;
         Private name As String&lt;br /&gt;
         Public Sub New(ByVal name As String)&lt;br /&gt;
             Me.name = name&lt;br /&gt;
         End Sub&lt;br /&gt;
         Public Shared Function WhichStudentIsSmaller( _&lt;br /&gt;
           ByVal o1 As Object, ByVal o2 As Object) As Comparison&lt;br /&gt;
             Dim s1 As Student = DirectCast(o1, Student)&lt;br /&gt;
             Dim s2 As Student = DirectCast(o2, Student)&lt;br /&gt;
             If String.rupare(s1.name, s2.name) &amp;lt; 0 Then&lt;br /&gt;
                 Return Comparison.theFirst&lt;br /&gt;
             Else&lt;br /&gt;
                 Return Comparison.theSecond&lt;br /&gt;
             End If&lt;br /&gt;
         End Function&lt;br /&gt;
         Public Overrides Function ToString(  ) As String&lt;br /&gt;
             Return name&lt;br /&gt;
         End Function&lt;br /&gt;
     End Class&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>