Einzelnen Beitrag anzeigen

Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

Konstruktoren in Delphi

  Alt 18. Sep 2019, 09:51
Guten Tag,

Kann mir jemand erklären wie die ganze Konstruktoren Geschichte in Delphi funktioniert ?
Ich blicke da einfach nicht durch.

Ich habe ein neues VCL-Form erstellt und möchte nun einen eigenen Konstruktor erstellen:

Delphi-Quellcode:
public
   { Public-Deklarationen }
   Constructor Create(_pnlColor:TColor;_pnlTitle:String;_memoContent:TStringList);

//....

constructor TFehler.Create(_pnlColor: TColor; _pnlTitle: String;
   _memoContent: TStringList);
begin
   Inherited Create(self); //1
   setPanelTitle(_pnlTitle);
   setPanelTitleColor(_pnlColor);
   fillMemo(_memoContent);
end;
1. Warum muss hier Create(self) angegeben werden ? Warum reicht Inherited; nicht aus ?

Ich verstehe das so: Inherited muss benutzt werden damit der Standard-Konstruktor aufgerufen wird. Wenn ich Inherited nicht verwenden würde, dann würde mein VLC-Formular nicht erstellt werden.

2. Wann werden folgende Schlüsselwörter benötigt.
  • override
  • overload
  • reintroduce
  • virtual

3. Wie erstelle ich einen eigenen Konstruktor ohne Parameter ?
Ich möchte noch bestimmte Werte setzten, wenn das Objekt erstellt wird.

Im Beispiel hier wird ein overload; angegeben.
Dies begreife ich nicht. Ein override; würde für mich mehr Sinn ergeben. Ich möchte ja einen eigenen Standard-Constructor erstellen sonst würden ja zwei gleiche exisieren:

Delphi-Quellcode:
type
  // Define a parent class, base on TObject by default
  TFruit = class
  public
    name : string;
    Constructor Create; overload; // This constructor uses defaults
    Constructor Create(name : string); overload;
  end;

constructor TFruit.Create;
begin
   Inherited;
        //Setze Initial-Werte...
end;
Somit existiert hier ja:
Delphi-Quellcode:
Create; //Standard-Konstruktor
Create; //Überladener-Konstruktor
Create(name:String); overload; //Überladener-Konstruktor was ok ist weil durch die parameter kann der Konstruktor vom anderen unterschieden werden
Wie weis Delphi nun welchen Create; Konstruktor genommen werden soll ?

Danke für die Hilfe.
Gruss Int3g3r
  Mit Zitat antworten Zitat