Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Frage zur Vererbung bei Propertys (https://www.delphipraxis.net/145913-frage-zur-vererbung-bei-propertys.html)

ryLIX 10. Jan 2010 19:15


Frage zur Vererbung bei Propertys
 
Hi DP,
ich hab eine Frage zu Propertys von Klassen.

Ich hab in der Eltern Klasse ein Property mit Getter und Setter Methode welchem ich in der Kinder Klasse gern einen anderen Namen geben würde.

z.B.
Eltern Klasse
Delphi-Quellcode:
property Empfaenger: String read GetEmpfaenger write SetEmpfaenger;
Dann sollte der Name beim Child
Delphi-Quellcode:
property Sender: String read GetEmpfaenger write SetEmpfaenger;
Sein aber das gleiche Feld bedienen da ich den Zugriff über Propertys regel und diese sind von Außen eh nicht sichtbar da private.

Wenn es hier keine solche Möglichkeit gibt welche Optionen habe ich dann?

mkinzler 10. Jan 2010 19:17

Re: Frage zur Vererbung bei Propertys
 
Du kannst die weitere Property ja zusätzlich einführen

himitsu 10. Jan 2010 19:18

Re: Frage zur Vererbung bei Propertys
 
Delphi-Quellcode:
property Sender: String read GetEmpfaenger write SetEmpfaenger;
wenn vom Child Zugriff auf diese Getter und Setter bestehen, dann geht das so

wenn du nur Zugriff auf das Property hast, dann wirst du wohl eigene Getter und Setter für dein Property schreiben müssen und leitest darin den Zugriff auf das alte Property weiter.

Sir Rufo 10. Jan 2010 19:21

Re: Frage zur Vererbung bei Propertys
 
Zitat:

Zitat von ryLIX
Dann sollte der Name beim Child
Delphi-Quellcode:
property Sender: String read GetEmpfaenger write SetEmpfaenger;
Sein aber das gleiche Feld bedienen da ich den Zugriff über Propertys regel und diese sind von Außen eh nicht sichtbar da private.

Hiermit greifst du aber auch nicht auf die Felder, sondern auf die Getter und Setter zu.

Wenn du diese in der Eltern-Klasse in den protected-Bereich gibst, dann kannst du neue Klassen genau so davon ableiten und erweitern

ryLIX 10. Jan 2010 20:07

Re: Frage zur Vererbung bei Propertys
 
Zitat:

Zitat von mkinzler
Du kannst die weitere Property ja zusätzlich einführen

Ich möchte es ja ersetzten nicht erweitern in der abgeleiteten Klasse.


Zitat:

Zitat von himitsu
Delphi-Quellcode:
property Sender: String read GetEmpfaenger write SetEmpfaenger;
wenn vom Child Zugriff auf diese Getter und Setter bestehen, dann geht das so

wenn du nur Zugriff auf das Property hast, dann wirst du wohl eigene Getter und Setter für dein Property schreiben müssen und leitest darin den Zugriff auf das alte Property weiter.

Gut diese Möglichkeit besteht aber nun ist ja das property immer noch sichtbar in der abgeleiteten Klasse.

Gibt es eine Möglichkeit mit override; ?

himitsu 10. Jan 2010 20:11

Re: Frage zur Vererbung bei Propertys
 
Namen überschreiben kann man nicht

und man kann die Sichtbarkeit nur erhöhen
> also man kann Oroperties sichtbarer machen, aber nicht wieder unsichtbar
= was einmal da/sichtbar ist, bleibt auch da/sichtbar

Sir Rufo 10. Jan 2010 20:12

Re: Frage zur Vererbung bei Propertys
 
Gibt es dafür einen plausiblen Grund, warum die Eigenschaft nicht mehr sichtbar sein soll?

ja -> Anfrage an embacadero
nein -> what for :mrgreen:

SirThornberry 10. Jan 2010 20:13

Re: Frage zur Vererbung bei Propertys
 
ersetzen geht nicht. Das würde auch keinen Sinn machen denn was soll dann passieren wenn es jemand auf die Vorgängerklasse castet?
Eine Variante wäre das du das Property in der Basisklasse unter protected declarierst. Somit kommt von außen keiner per Cast ran. Und in der abgeleiteten Klasse fügst du dann ein neues Property hinzu was nichts anderes macht als auf das Ursprungsproperty zu zugreifen.
Aber ich denke du hast irgendwo einen Designfehler. Denn Vererbung und dann umbenennen macht keinen Sinn. Da hast du meiner Meinung nach die Vererbung nicht ganz verstanden.

ryLIX 10. Jan 2010 20:23

Re: Frage zur Vererbung bei Propertys
 
Ok ich glaub ich werd mir da noch mal ein paar gedanken zu machen.


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