AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

public property überschreibbar?

Ein Thema von Gruber_Hans_12345 · begonnen am 12. Mai 2007 · letzter Beitrag vom 12. Mai 2007
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#1

public property überschreibbar?

  Alt 12. Mai 2007, 16:05
Hi,

ich möchte ein public property overriden, und zwar hat ein Form ja das Property ModalResult, das per read und write direkt auf fModalResult zugreift.
Nun möchte ich in meinem abgeleiteten Formular diese property überschreiben, so das meine Setter procedure aufgerufen wird.
Das sollte auch dann funktionieren, wenn auf das TForm zugegriffen wird (also zb.: ein Button, der ModalResult gesetzt hat das ModalResult des Formulares setzt)

habe ich da irgendeine Möglichkeit (mit normalen OOP scheint es ja nicht zu funktionieren, aber es darf auch gerne eine etwas dirty funktion werden )
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: public property überschreibbar?

  Alt 12. Mai 2007, 16:30
Eine Propety kann man problemlos überschreiben.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: public property überschreibbar?

  Alt 12. Mai 2007, 16:33
Zitat von mkinzler:
Eine Propety kann man problemlos überschreiben.
falsch! Ein Property kann man überdecken aber nicht überschreiben. Sobald man auf eine Vorfahrenklasse castet wird ist das überdecken ausgehebelt. Wenn also ein Button per "TForm(GetParentForm(Self)).ModalResult" auf Modalresult zugreift wird immer der Zugriff verwendet wie er in TForm implementiert ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#4

Re: public property überschreibbar?

  Alt 12. Mai 2007, 16:34
ja schon, aber leider funkt es halt nur nicht.

zumindest nicht, wenn auch die VCL auf dieses property zugreift, die verwendet dann immer nur das alte property und nicht mein neues property oder übersehe ich hier was?

@SirThornberry: genau das problem habe ich, gibt es hier irgend eine möglichkeit das zu umgehen?

bei procedure kann ich ja den einsprungspunkt der Klasse auf eine ander funktion umbiegen, aber wie geht das bei reinen properties?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: public property überschreibbar?

  Alt 12. Mai 2007, 16:37
Wie hast du die property überschrieben?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: public property überschreibbar?

  Alt 12. Mai 2007, 16:37
du übersiehst nichts, es ist schlichtweg nicht möglich wenn es nicht vorgesehen ist. Properties welche "überschreibbar" implementiert sind haben eine Methode welche virtuell ist so das diese überschrieben werden kann. Ist dies nicht der Fall verhält es sich wie bei Methoden welche nicht als virtuell oder abstract decleriert sind. Diese können nur verdeckt aber nicht überschrieben werden.

@mkinzler: Wie kann man denn ein Property überschreiben? oder ist das seit Delphi2007 möglich? Bis dahin wurde es auf jeden Fall seitens der Programmiersprache nicht unterstützt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#7

Re: public property überschreibbar?

  Alt 12. Mai 2007, 16:45
so hab ichs "überladen"

Delphi-Quellcode:
public
    property ModalResult : TModalResult read GetModalResult write SetModalResult;
end;
meine Getter und Setter werden zwar aus meinen eigenen Funktionen aufgerufen (die, die in der klasse sind, oder die direkt auf meine klasse zugreifen, aber nicht von der VCL)

    JumpFromCode( GetNativeAddr(@TFormWriter.WriteProperties), @TFormWriter.WriteProperties_Fix, @fWriter_WriteProperty_Inst); so kann ich ja procedure einer klasse überschrieben, die nicht mit virtual gekennzeichnet sind, kann man so ähnlich auch ein property überschreiben?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: public property überschreibbar?

  Alt 12. Mai 2007, 17:05
so überschreibst du eine Methode aber nicht sondern ersetzt diese sozusagen. Wenn eine weitere Klasse auf die gleiche Art die Methode "überschreiben" würde, würde ein riesen durcheinander entstehen weil jeder das des anderen ersetzt. Ein richtiges überschreiben geht nur wenn es vom compiler unterstützt wird und das ist bei properties nicht der fall.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#9

Re: public property überschreibbar?

  Alt 12. Mai 2007, 17:13
das ist mir schon klar, das es kein richtiges überschreiben ist,
aber mir würde hier ein ersetzen auch schon helfen.

Ich möchte einfach eine Getter/Setter function, die beim Modalresult aufgerufen wird - es sollte entweder dsa property selbst irgendwie ersetzt werden, oder die Getter/Setter einträge.
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz