Un delegado es un tipo que hace referencia a un método, es algo parecido a los punteros que se usan en c++. Se usa entre muchas otras cosas para declarar los eventos, mejor te pongo un ejemplo sencillo:
-   
- class Class1 
-     { 
-         public delegate void Midelegado(string valor); 
-         public event Midelegado Elevento; 
-   
-         public void Imprimir(string texto) 
-         { 
-             Console.WriteLine(texto); 
-             if (Elevento != null) 
-                 Elevento("todo ok"); 
-              
-         } 
-     } 
-   
Ahora desde tu metodo main t
-   
- static void Main(string[] args) 
-         { 
-             Class1 impresion  = new-  Class1 ();
-             impresion .Elevento+= new-  Class1 .Midelegado(- Resultado );
-             impresion.Imprimir("hola mundo"); 
-              
-         } 
-          
-         static void Resultado(string text) 
-         { 
-             Console.WriteLine(text); 
-         } 
-   
Bueno, con un poco de codigo pocas palabras bastan no?
Si no entiendes algo avisa, es que ahora no tengo nada de tiempo. Un saludo!!