Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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