Entwickler-Ecke
Basistechnologien - Verständnisproblem event handler
funcry - Fr 20.03.09 16:26
Titel: Verständnisproblem event handler
Zwar setze ich events bereits ein, jedoch verstehe ich dabei eine Sache nicht.
Die Definition des Event handlers erfolgt in allen Beispielen ausserhalb der Klasse. So wie beispielsweise in diesem Tutorial:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| delegate void ButtonEventHandler(object source, int clickCount);
class Button { public event ButtonEventHandler ButtonClick;
public void clicked(int count) { if (ButtonClick != null) ButtonClick (this,count); } } |
Ich habe testweise die Deklaration des Event handlers in die Klasse getan - und es funktioniert genauso.
Was mich stört ist, dass der Bereich ausserhalb der Klasse doch eigentlich zum aufrufenden Programm gehört und mit der Klasse "Button" nichts zu tun hat. Aber die Definition des Event handlers doch logisch betrachtet zu der Klasse "Button" gehört.
Was wäre, wenn ich aus der Klasse "Button" eine dll machen würde. Man könnte dann auf die klasse Button zugreifen, müsste aber die Event Handler selbst definieren ?
Kha - Fr 20.03.09 17:11
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.
funcry - Fr 20.03.09 20:49
Danke für die Erklärung, jetzt steht nichts mehr im Weg die Technik wie vorgesehen zu nutzen :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!