Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Overload und Override für Constructor (https://www.delphipraxis.net/52667-overload-und-override-fuer-constructor.html)

meierotto 1. Sep 2005 10:20


Overload und Override für Constructor
 
Hallo,

ich befürchte, dass meine Frage schon in anderen Themen behandelt wurde,
hab aber in der Masse der Auswahl nichts finden können.

Mein Problem ist, dass ich einen Constructor als Overload sowie Override definieren möchte:

Delphi-Quellcode:
constructor Create(AOwner:TComponent); overload; override;
constructor Create(AOwner:TComponent;B,MB,PIN:String); overload; override;
Dabei wird mir aber die Fehlermeldung "Deklaration von 'Create' unterscheidet sich von vorheriger Deklaration" für die 2. Create-Deklaration angezeigt.
Was tu ich denn falsch machen?

:gruebel:

Bernhard Geyer 1. Sep 2005 10:30

Re: Overload und Override für Constructor
 
Definiere deine B,MB,PIN-Attribute als Properties.

Für TComponent-Nachfahren sollte man keine überladenen Konstruktoren definieren, da damit die Verwendung der Komponente in der IDE nicht mehr sinnvoll möglich ist, da hier nur der "default" Konstruktor mit einem Übergabeparameter verwendet wird.

Also verwende Properties und definiert dir ein Active-Property oder eine Connect-Methode.

Flocke 1. Sep 2005 10:31

Re: Overload und Override für Constructor
 
Die erste Version von Create, die du überladen willst, hatte natürlich kein "overload".

Warum nennst du den zweiten Konstruktor nicht einfach anders, z.B. CreateWithParams, dann brauchst du kein Overload.

//EDIT: wo war die rote Box?

meierotto 1. Sep 2005 10:47

Re: Overload und Override für Constructor
 
Danke :thumb: ,

eure Tipps haben mich auf die Lösung gebracht. Natürlich ist nur eines der beiden Creates als override zu definieren, nämlich die dem Parent-Constructor gleiche Prozedur. Den zweiten Constructor habe ich als overload und virtual definiert - und schon klappts.

Bis zur nächsten Frage :zwinker:

tommie-lie 1. Sep 2005 10:53

Re: Overload und Override für Constructor
 
:gruebel: Warum überhaupt override bei Konstruktoren? Die sind doch gar nicht virtuell, macht ja auch keinen Sinn, virtuelle Konstruktoren zu haben :stupid:

Flocke 1. Sep 2005 11:04

Re: Overload und Override für Constructor
 
Zitat:

Zitat von tommie-lie
:gruebel: Warum überhaupt override bei Konstruktoren? Die sind doch gar nicht virtuell, macht ja auch keinen Sinn, virtuelle Konstruktoren zu haben :stupid:

Stimmt auch wieder - gar nicht dran gedacht 8)

Robert Marquardt 1. Sep 2005 11:24

Re: Overload und Override für Constructor
 
Haeh? Ab spaetestens TComponent ist Create virtuell.

BlackJack 1. Sep 2005 11:33

Re: Overload und Override für Constructor
 
oder wenn man von einer eigenen klasse ableitet, die den constructor virtuell gemacht hat.

edit: könnte man beim 2. Create nicht auch statt override; einfach reintroduce; benutzen?

Flocke 1. Sep 2005 11:45

Re: Overload und Override für Constructor
 
Zitat:

Zitat von Robert Marquardt
Haeh? Ab spaetestens TComponent ist Create virtuell.

Auch richtig - heute ist echt nicht mein Tag 8)

Aber nochmal: was soll der ganze Rhabarber? Ein Konstruktor muss nicht Create heißen - gib dem Kind einfach einen anderen Namen, das macht außerdem den Code lesbarer.

Robert_G 1. Sep 2005 11:52

Re: Overload und Override für Constructor
 
Zitat:

Zitat von Flocke
Aber nochmal: was soll der ganze Rhabarber? Ein Konstruktor muss nicht Create heißen - gib dem Kind einfach einen anderen Namen, das macht außerdem den Code lesbarer.

Sorry, aber ich _hasse_ Konstruktoren, die _nicht_ Create heißen.
Delphis *piep* Unsitte, Konstruktoren wie class functions aussehen zu lassen wird damit noch verschlimmert.
Bis jetzt kann man im Code bei einer "class function" namens Create wenigstens noch davon ausgehen, dass sie eigentlich ein Constructor ist. Mit deinem Vorschlag würde das in einem Chaos untergehen.
Warum müssen Konstrutoren/Destruktoren überhaupt einen Namen haben? :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz