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!";
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.