Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi public property überschreibbar? (https://www.delphipraxis.net/91971-public-property-ueberschreibbar.html)

Gruber_Hans_12345 12. Mai 2007 16:05


public property überschreibbar?
 
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 ;) )

mkinzler 12. Mai 2007 16:30

Re: public property überschreibbar?
 
Eine Propety kann man problemlos überschreiben.

SirThornberry 12. Mai 2007 16:33

Re: public property überschreibbar?
 
Zitat:

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.

Gruber_Hans_12345 12. Mai 2007 16:34

Re: public property überschreibbar?
 
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?

mkinzler 12. Mai 2007 16:37

Re: public property überschreibbar?
 
Wie hast du die property überschrieben?

SirThornberry 12. Mai 2007 16:37

Re: public property überschreibbar?
 
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.

Gruber_Hans_12345 12. Mai 2007 16:45

Re: public property überschreibbar?
 
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)

Delphi-Quellcode:
    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?

SirThornberry 12. Mai 2007 17:05

Re: public property überschreibbar?
 
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.

Gruber_Hans_12345 12. Mai 2007 17:13

Re: public property überschreibbar?
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 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