Aus diesem Grund sind alle
VCL-Komponenten von TComponent abgeleitet, wo vorallem der Constructor virtuell ist,
sowie bei allen Klassen der Destructor virtual ist.
Auf diese Weise kann die
VCL den richtigen Constructor laden und auch immer der richtige Destructor ausgeführt werden, da der Vorfahre diese kennt.
Stimmt, die Sache mit dem Eintrag in die
VMT hatte ich vergessen. Daher muss ich ab diesem Punkt tatsächlich trebor90 rechtgeben. Die Handhabe von Delphi in bezug auf überladene Methoden, wenn die Hauptmethode im Basistyp als virtuell deklariert wurde, steht tatsächlich im Widerspruch zur
OOP.
Verdecke ich ich einfach die original Methode, dann wird hier kein Eintrag in der
VMT hinterlegt und ich muss sehr genau wissen ab welcher Stufe der Vererbung die entsprechende Methode mit reintroduce verdeckt wurde.
Wie verhält es sich nun bei Weiterveerbung? Sidn die Subklassen dann in der
VMT ab hier auf die verdeckte Methode des Vorfahr bezogen oder wieder aufgrund der
VMT auf die Superklasse?
Ich habe tatsächlich sehr viel dazugelernt. Bisher hätte ich nicht erwartet, dass Delphi sich im Gegensatz zu anderen
OOP-Sprachen doch so entscheidende Abweichungen erlaubt.
Darüber hinaus habe ich auch mal Experimente mit der Mainform angestellt, weil ich jetzt wirklich wissen wollte, ob die globale Variable für das MainForm überflüssig ist.
Und uups, in der Tat es ist so, wenn ich das Fensterhandle des MainForms auslesen will, muss ich Application.Handle verwenden und tatsächlich nicht MainForm.Handle.
Vielen Dank für diesen Augenöffner.