PS: Da oben gibt es immernoch kein XE6 (wobei ich hier eher ein XE7+ gebraucht hätte
)
Kleines billiges Beispiel:
Delphi-Quellcode:
type
TMyBaseClass = class
private
class var FMyVar: TMyBaseClass;
public
class function CreateGlobalInstance: TMyBaseClass;
end;
TMyClassA = class(TMyBaseClass)
end;
TMyClassB = class(TMyBaseClass)
end;
TMyClassC = class(TMyClassB)
end;
Hier haben ja nun alle Klassen nur die eine Variable.
Nun kann man in der Basisklasse das z.B. über ein
TObjectDictionary<TMyBaseClassClass,TMyBaseClass>
lösen,
oder man führt in jedem Nachfahren ein eigene Variable ein. (sowas in der Art hab ich schon paar Mal gesehn)
Delphi-Quellcode:
type
TMyBaseClass = class
private
class var FMyVar: TMyBaseClass;
class function GetMyVar: PMyBaseClass; virtual; // oder halt je ein virtueller Getter und Setter
public
class function CreateGlobalInstance: TMyBaseClass;
end;
TMyClassA = class(TMyBaseClass)
private
class var FMyVar: TMyBaseClass;
class function GetMyVar: PMyBaseClass; override;
end;
Mal so als Frage:
Wie oft wird sowas eigentlich benötigt
und wäre es nicht schöner, wenn Delphi von selber diese Variable verwalten könnte?
Mir ist grade der Gedanke gekommen, daß Delphi das eigentlich selber können dürfte und das ohne große neue Erfindungen.
Delphi-Quellcode:
type
TMyBaseClass = class
private
class var FMyVar: TMyBaseClass; virtual;
public
class function CreateGlobalInstance: TMyBaseClass;
end;
TMyClassA = class(TMyBaseClass)
private
//class var FMyVar: TMyBaseClass; // automatisch vom Delphi erstellt
end;
* bei Ableitungen schiebt Delphi eine implizite Kopie dieser Class-Var jeweils mit in die neue Klasse rein
* in der Basisklasse würde nun, wie bei virtiellen Methoden, ein Eintrag in der
VMT mit angelegt (der Zeiger auf die Variable ist ja genauso groß, wie ein Zeiger auf 'ne Methode)
* in den Ableitungen wird dann jeweils dieser Zeiger auf die eigene Variable umgeschrieben
* beim Zugriff auf die Variable würde das dann wie bei Klassen-Feldern gehen, also mit dem Pointer aus der Klassendeklaration wird auf die richtige Variable umgeleitet.