Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#13

AW: Konstruktoren in Delphi

  Alt 21. Sep 2020, 15:34
4) Wann ist ein "Inherited" notwenig im Konstruktor/Dekonstruktor ? Sobald von einer Klasse geerbt wird, richtig ?
Setze einfach inmmer ein inherited; in den Konstruktor und Destruktor, bei ersterem (in aller Regel) am Anfang, im Destruktor ans Ende. Jede Klasse erbt von irgendeiner Basisklasse, und wenn es nur TObject ist, die zwar einen leeren Konstruktor hat, aber vielleicht ändert sich das mal.

Zitat:
Meine Klasse soll nur mit diesem Konstruktor mit Parameter instanziert werden können.
Das geht auch irgendwie, im Zweifel mit Prüfung bestimmter Variablen beim Aufruf anderer Methoden der Klasse. Will man den Konstruktor der Basisklasse verdecken und dem Compiler sagen, dass das so in Ordnung ist, kann man ihn mit overload; reintroduce; markieren. IIRC verhindert das aber nicht, den Konstruktor der Basisklasse zu nutzen.

Zitat:
Bei C# ist ein Standardkonstruktor notwendig, ist das bei Delphi auch der Fall ?
Jein. Es gibt immer den Konstruktor der Basisklasse, der immer dann verwendet wird, wenn in der abgeleiteten Klasse keiner definiert ist oder keiner mit passender Parametersignatur gefunden wird. Aber der Konstruktor der Basisklasse lässt nicht immer anwenden, z.B. bei abstrakten Klassen (TStrings).

Zitat:
6) Das Beispiel oben lässt sich kompillieren und instanzieren.
Leider verstehe ich aber nicht warum bei Mail.Free der Destruktor nicht abgehandelt wird.
Jeder Destruktor sollte/muss mit override; markiert werden, damit der der abgeleiteten Klasse gerufen wird, nicht der der Basisklasse. Tut man das nicht, gibt der Compiler eine Warnung, soweit ich weiß.

Grüße
Dalai
  Mit Zitat antworten Zitat