Un delegado es un tipo que encapsula de forma segura un método, similar a un puntero de función en C y C++. A diferencia de los punteros de función de C, los delegados están orientados a objetos, proporcionan seguridad de tipos y son seguros. El tipo de un delegado se define por el nombre del delegado.
https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/delegates/using-delegates
https://www.tutorialspoint.com/csharp/csharp_delegates.htm
https://steven-giesel.com/blogPost/aa77f7fb-41a7-47d2-8e48-ef9e101cf08e