Forum: Object-Pascal / Delphi-Language
Delphi
by Ralf Kaiser,
26. Sep 2009
Gewöhn dir einfach an es immer so zu machen:
MyObject := TMyObject.Create
FreeAndNil(MyObject);
// oder:
// MyObject.Free;
// MyObject := nil;
Forum: Object-Pascal / Delphi-Language
Delphi
by Ralf Kaiser,
25. Sep 2009
Nein. Das geht nicht. "Button1.OnClick" ist ein Methodenzeiger der intern eigentlich aus 2 Zeigern besteht, einem der auf die Methode verweist und einem der auf das aktuelle Objekt verweist. (in einen Record verpackt)
Das ganze wird mit einer Prise Compiler-Magie verwaltet.
EDIT:
wenn man "if Button1.OnClick = nil" benutzt, geht der Compiler ausserdem davon aus, dass "OnClick" eine...
Forum: Object-Pascal / Delphi-Language
Delphi
by Ralf Kaiser,
25. Sep 2009
Ausserdem kann Assigned() noch ein wenig mehr. So kann man z.B. prüfen ob ein Event bereits zugewiesen ist (if Assigned(ButtonOnClick)...) was man nicht mit einem Test auf "nil" machen kann.
Wenn man nun einmal Assigned() einsetzen muss, ist es nur konsequent es auch da zu tun wo man es kann. Das ist dann einheitlicher und damit "hübscher" :wink: