Essential C# 5.0 Note - Chapter 12 - Delegates

Delegates - passing a reference to one method as an argument to another method.

Delegates - allow you to capture a reference to a method and pass it around like any other object, and to call the captured method like any other method.

class DelegateSample
{
public delegate bool ComparisonHandler(int first, int second);

public static void BubbleSort(
int[] items, ComparisonHandler comparisonMethod)

{

int i;
int j;
int temp;

if (comparisonMethod == null)
{
throw new ArgumentNullException("comparisonMethod");
}

if (items == null)
{
return;
}

for (i = items.Length - 1; i >= 0; i--)
{
for (j = 1; j <= i; j++)
{
if (comparisonMethod(items[j - 1], items[j]))
{
temp = items[j - 1];
items[j - 1] = items[j];
items[j] = temp;
}
}
}
}

public static bool GreaterThan(int first, int second)
{

return first > second;
}

public static bool AlphabeticalGreaterThan(int first, int second)
{

int comparison;
comparison = (first.ToString().CompareTo(second.ToString()));

return comparison > 0;
}

static void Main()
{

int i;
int[] items = new int[5];

for (i = 0; i < items.Length; i++)
{
Console.Write("Enter an integer: ");
items[i] = int.Parse(Console.ReadLine());
}

BubbleSort(items, AlphabeticalGreaterThan);

// ...

BubbleSort(items,
(int first, int second) =>
{
return first < second;
}
);

// ...

for (i = 0; i < items.Length; i++)
{
Console.WriteLine(items[i]);
}

Console.ReadLine();
}
}