Warum sind Ereignisse immer als properties implementiert?

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Warum sind Ereignisse immer als properties implementiert?

Beitrag von RSE »

Warum steht immer sowas:

property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;

anstatt einfach:

OnCreate: TNotifyEvent;

Edit: Wieso Propertys, wenn keine Getter (im Beispiel GetOnCreate) oder Setter (im Beispiel SetOnCreate) definiert werden?
Zuletzt geändert von RSE am Mi 30. Jul 2008, 17:07, insgesamt 1-mal geändert.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

Beitrag von slai »

Dies gehört zu den Basics der Objektorientierten Programmierung:

http://www.delphi-treff.de/sprachen/obj ... entierung/
Windows 7, Lazarus 0.9.28.2 fpc 2.2.4, Firebird 2.1, Zeoslib 6.6.6-stable

slai
Beiträge: 211
Registriert: Fr 27. Apr 2007, 17:36
Wohnort: Zürich
Kontaktdaten:

Beitrag von slai »

Ah sorry Falsch gelesen Ereignisse :-)
Windows 7, Lazarus 0.9.28.2 fpc 2.2.4, Firebird 2.1, Zeoslib 6.6.6-stable

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Beitrag von RSE »

Die Hauptfrage is, wieso Propertys, wenn keine Getter (im Beispiel GetOnCreate) oder Setter (im Beispiel SetOnCreate) definiert werden?
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Beitrag von EugenE »

denke mal damit die IDE diese leichter verarbeiten kann, um z.B im Objekt Inspektor einfach den Event doppelklicken und schon dieser erstellt, wenn das OnCreate jetzt kein property ist wird dieses auch nich im Objekt Insp... nicht aufgelistet ....... so denke ich zumindest das es so implementiert ist , aber naja jeder kann sich irren :D

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Beitrag von RSE »

Na wenn das der einzige Grund is, dann brauch ich das ja bei meinen eigenen Klassen nicht so tun, solange ich keine neuen Komponenten registrieren möchte ;-)
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

OnCreate: TNotifyEvent;

Meiner Ansicht nach kein Problem.

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Solang das eine Nichtvisuelle Komponente ist, hast du recht.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Beitrag von Socke »

Christian hat geschrieben:Solang das eine Nichtvisuelle Komponente ist, hast du recht.

Ja, aber wenn das irgendwann in ferner Zukunft mal eine Visuelle Komponente werden sollte, könnte das mit den Bezeichnernamen ein bisschen haarig werden

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Deswegen macht solchen Quatsch ja normalerweise keiner.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Beitrag von RSE »

Also ich denke, solange ich nur für mich arbeite und keine megagroße Bibliothek mit selbstgebauten Komponenten habe, kann ich zur Not aus dem

OnCreate: TNotifyEvent;

immernoch ein

property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;

machen, falls ich tatsächlich mal irgendwann eine Komponente registrieren möchte.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ja, kannst du es ist etwas unsauber und ich versteh nicht wirklich warum du das machen willst aber du verbaust dir damit nix.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@RSE ganz einfach: Weil man dann im OI die Events zuweisen kann, sonst meine ich nicht. Darum müssen die auch im Published Teil stehen.
MFG
Michael Springwald

RSE
Beiträge: 462
Registriert: Mi 30. Jul 2008, 13:11
OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
CPU-Target: 32Bit
Kontaktdaten:

Beitrag von RSE »

@ pluto: Da du jetzt der zweite bist, der das so meint, geh ich mal davon aus, dass das der Grund ist.

@ Christian: Weil ich nicht so ganz verstehe warum man erst so einen Konstrukt (property) drumherumbauen muss, wenn man die sich damit eröffnende zusätzliche Funktionalität (Getter und Setter) sowieso nicht benutzt. Wahrscheinlich optimiert der Compiler den Umweg zwar wieder weg, aber ohne diesen Konstrukt ist mein Quelltext schlanker.

p.s.: Dies ist wohl mein letzter Post vor dem Urlaub ;-)
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Beitrag von Dets »

Bei Properties kannst du in abgeleiteten Klassen die Sichtbarkeit ändern (also z.B. von private nach public), bei einfachen Variablen nicht.

greetz, Dets ...

Antworten