Moin xaromz
Schnappe dir einfach mal den Refletor und "surfe" durch die
FCL. Das ist praktisch so als würdest du in den
VCL Sourcen wühlen, nur ein wenig geordneter, weil typenbezogen.
Was Jürgen mit Events meint ist ein kleiner Kulturschock von Delphianern wenn sie es mit .Net zu tun bekommen.
In Delphi32 hieß ein event OnClick und war einfach nur eine property eines Funktionszeigers.
In .Net heißt er dann Click und ein Event ist dort ein eigener Membertyp.
Er ähnelt ener Property, doch anstatt get_/set_ haben seine Accessor die prefixe add_ und remove_.
Konsumenten deiner Klasse können also nur Delegateinstanzen hinzufügen oder ihre eigenen entfernen, aber
nicht direkt den ganzen Event besetzen und somit auch nicht andere Eventhandler überschreiben.
In C# sähe das so aus:
Code:
public event DeinDelegate DeinEvent;
protected virtual void OnDeinEvent()
{
DeinDelegate deinEvent = DeinEvent;
if(deinEvent != null)
deinEvent(someParameter);
}
Entgegen den Hirnies in die die
MSDN Docs zu dem Thema schrieben, solltest du bei der Abfrage ob dein Event leer ist
nicht das Eventfeld hernehmen.
Delegates sind immutable, d.h. wenn jemand zwischen deiner Null-Prüfung und dem Ausführen den letzten Verweis eines Handlers in einem anderen Thread entfernt, würde dein Feld null sein. Und du würdest versuchen einen null-Zeiger auszuführen.
Deshalb packe ich es immer in eine lokale Variable und prüfen die bevor ich sie ausführe.
btw: Am 25.10. ist mal wieder
DP Stammtisch in M., da kannst du mich ja persönlich ausquetschen.