Hallo! Ich möchte endlich mal verstehen, warum es so ist. In der
Unit System wird TObject eingeführt und der Constructor ohne "virtual", aber der Destructor mit "virtual" deklariert.
Entsprechend muss man bei der Ableitung beim Destructor das Schlüsselwort "override" angeben, während man beim Constructor einfach so Create() überschreiben kann. In beiden Routinen kann und soll man dann mit "inherited" die Vorfahrroutine aufrufen.
WARUM bloß ist das so? Warum ist bei Create kein "virtual" deklariert und es geht trotzdem alles und warum braucht man beim Destructor das "virtual > override"?
Hätten die Entwickler von TObject nicht beide Prozeduren analog deklarieren können? Also beide mit oder beide ohne "virtual"?
Gibt es einen Grund, warum es so ist? Mich irritiert es schon immer, dass ich bei Create ohne override auskomme, bei Destroy es aber angeben muss, sich aber beide Prozeduren ansonsten identisch zu verhalten scheinen, abgeleitet und überschrieben werden können und "inherited" auch verwendbar ist.
Danke im voraus für jede Erhellung des Sachverhalts!
Delphi-Quellcode:
{ unit System }
TObject =
class
public
constructor Create;
{ ...}
protected
destructor Destroy;
virtual;
{... }
constructor TObject.Create;
begin
end;
destructor TObject.Destroy;
begin
end;
und die Verwendung in abgeleiteten Klassen:
Delphi-Quellcode:
TMyObject = class(TObject)
constructor Create;
destructor Destroy; override;
{ ...}
implementation
constructor TObject.Create;
begin
inherited;
{ ... }
end;
destructor TObject.Destroy;
begin
{ ... }
inherited;
end;