A Delegate is a reference to a function, in the same way that a TextBox variable is a reference to teh instance of a TextBox that appears on the screen.
They are surprisingly handy: you can use them to write code that can work to a variety of destinations without changing the code. For example, you could write a Print method that took a delegate:
private void DoPrint()
{
string text = "hello world!";
Print(text, PrintConsole);
Print(text, PrintTextbox);
}
private void PrintConsole(string s)
{
Console.WriteLine("Console: " + s);
}
private void PrintTextbox(string s)
{
myTextBox.Text = "TextBox: " + s;
}
private delegate void printDestination(string s);
private void Print(string s, printDestination pd)
{
pd("From Print: " + s);
}
You can completely change what happens to the text without changing the code in the Print method.
There are a lot of other uses, but that's the general idea.