Eine gute Frage. Kurz gesagt: Öffentliche Nested Types (nichts anderes wäre der Delegate innerhalb der Klasse) sind in .NET einfach verpönt. Außerhalb deiner Klasse müsste man auf den Typ ja mit
Button.ButtonEventHandler verweisen, und das scheint Einigen einfach zu lang/kompliziert/... zu sein

. Es besteht auch die Gefahr, diese Schreibweise mit einer Property "ButtonEventHandler" in der Button-Klasse zu verwechseln.
Also: Jeder Typ, der
public ist, gehört per Konvention direkt in den
namespace-Block.
funcry hat folgendes geschrieben : |
Was wäre, wenn ich aus der Klasse "Button" eine dll machen würde. |
Dann würdest du den Delegate-Typ natürlich ebenfalls da reinstopfen

. Und zwar als public, damit er genauso wie die Klasse von jedem benutzt werden kann. Das Typsystem der CLR erlaubt auch gar nicht, einen Delegate-Typ durch einen anderen auszutauschen - selbst, wenn sie die gleiche Signatur besitzen.
PS: Nicht direkt zu deiner Frage: Events sollten immer
EventHandler<T> benutzen. Du brauchst also gar keinen eigenen Delegate-Typ, dafür aber einen
EventArgs-Nachfahr.