AGB  ·  Datenschutz  ·  Impressum  







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

Geerbter Getter für lokale Objekt-Konstante?

Ein Thema von Andreas13 · begonnen am 22. Jul 2020 · letzter Beitrag vom 24. Jul 2020
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.337 Beiträge
 
Delphi 12 Athens
 
#2

AW: Geerbter Getter für lokale Objekt-Konstante?

  Alt 22. Jul 2020, 23:05
Der Vorfahre kann NIEMALS etwas vom Nachfahren wissen. (Ausnahme er liest es via RTTI aus der/seiner TypeInfo/ClassType der erzeugten Instanz, oder greifst in dessen Methoden hart auf die anderen Typen zu)
Das ist wie bei Class-Procedure und Class-Procedure-Static, wo Letztere nur den ClassType seiner Deklaration kennt und Ersteres den aktuellen Typ der Ableitung (der Variable).

Also gibt es nur die Möglichkeit mit OVERRIDE, denn dann kennt es auch der Vorfahre. (abgesehn von der RTTI)



PS: Auch bei Property gibt es sowas wie Override Overload und Reintroduce.

Delphi-Quellcode:
//Procedure Test; Reintroduce;
Property n_Var Read Get_n_var; // overload/override = das gleiche Property, aber beim Nachfahren-[B]Typ[/B] mit anderem Getter

//Procedure Test; {Override} Overload;
Property n_Var: Integer Read Get_n_var; // reintroduce = ein neues Property mit nit selbem Namen
Und natürlich bezieht sich sowas immer auf den Typ der Variable und nicht auf den internen Typ vom Create.

Erstes wird meistens genommen, wenn man nur Default bzw. Stored ändern will, aber es kann auch für Read, Write und Index benutzt werden und der Rest wird geerbt.
Also von unserem Verständnis eher wie ein Override, aber aus Sicht des Compilers eigentlich mehr ein Overload.



Wenn es nur eine Reihe der Vererbung gibt, dann könnte man eine Function/GetterFunction in den letzen Erben tun,
oder in der selben Unit eine Function/GetterFunction in die Basisklasse, wo anhand vom ClassType bzw. IS mit ein paar IFs jeweils in den gewünschten Typ castet und dann das "richtige" zurückgibt.
Aber das ist alles eigentlich echt unschöner und hart verknubbelter Code, somit bleibt nur noch Override oder RTTI.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Jul 2020 um 00:41 Uhr)
  Mit Zitat antworten Zitat
 


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 12:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz