Um die Antworten von Jon und Jared zu ergänzen, möchte ich anmerken, dass man normalerweise nur dann einen Delegaten innerhalb einer Klasse definieren würde, wenn der Delegat ein privates Implementierungsdetail der Klasse wäre. Es ist selten und bizarr, einen öffentlich Delegatendefinition innerhalb einer Klasse.
Nehmen wir zum Beispiel mein Lieblingsmuster: eine abstrakte Basisklasse, die nur durch private verschachtelte Klassen erweitert werden kann, die mit Fabriken hergestellt werden:
public abstract class Animal
{
private Animal() { } // prevents subclassing from outside!
private sealed class Giraffe : Animal { }
private sealed class Leopard : Animal { }
public static Animal GetGiraffe( ) { return new Giraffe(); }
public static Animal GetLeopard( ) { return new Leopard(); }
Angenommen, ein Implementierungsdetail von Animal besteht darin, dass Sie einen Delegaten von Giraffe zu Leopard benötigen:
private delegate Leopard D(Giraffe g);
Dies kann keine öffentliche Delegatenklasse sein, da sie sich auf private Typen bezieht!
Heutzutage würde man so etwas natürlich nicht mehr tun. Sie würden Func<Giraffe, Leopard>
und Sie sind fertig.
Daher ist der verschachtelte Delegatentyp heutzutage eher der Vollständigkeit und Abwärtskompatibilität halber vorhanden; normalerweise würde man ihn nicht verwenden.