Delegaten sind Typen, Referenz-Typen.
Sie beschreiben die vollständige Signatur einer Methode
Damit kannst Du dann eine Methode als variable speichern, Parameter übergeben, etc.
Du arbeitest dann mit der Referenz zu einer Methode.
Bei Java gibts dafür meines Wissens nach nur Interfaces mit sowas wie einer Run-Methode.
Da man in Java ein Interface aber auch inline implementieren und davon direkt eine Instanz erzeugen kann, funktioniert das als Ersatz für Delegaten.
Unter C++ kannst Du dir für eine Methode den Pointer geben lassen und den dann als Variable umher reichen.
Das machen Delegates einfacher. Du kannst sehr einfach eine feste Definition für eine Methode fest legen, ihr einen Namen verwenden und so definieren, was für eine Methode als Parameter erwartet wird.