Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi (Falsche?) Warnung beim Überladen eines Konstruktors (https://www.delphipraxis.net/200982-falsche-warnung-beim-ueberladen-eines-konstruktors.html)

Jumpy 14. Jun 2019 10:22

AW: (Falsche?) Warnung beim Überladen eines Konstruktors
 
Ich hatte codehunter so verstanden, dass wenn Basisklasse und Ableitung in verschiedenen Units sind, das nicht auftaucht.

Neutral General 14. Jun 2019 10:41

AW: (Falsche?) Warnung beim Überladen eines Konstruktors
 
Zitat:

Zitat von Jumpy (Beitrag 1434635)
Ich hatte codehunter so verstanden, dass wenn Basisklasse und Ableitung in verschiedenen Units sind, das nicht auftaucht.

Auch das funktioniert.

Codehunter 14. Jun 2019 10:50

AW: (Falsche?) Warnung beim Überladen eines Konstruktors
 
Zitat:

Zitat von Neutral General (Beitrag 1434637)
Zitat:

Zitat von Jumpy (Beitrag 1434635)
Ich hatte codehunter so verstanden, dass wenn Basisklasse und Ableitung in verschiedenen Units sind, das nicht auftaucht.

Auch das funktioniert.

Bei mir nicht (Seattle). Letzten Endes sind aber inzwischen alle Möglichkeiten genannt, das Problem zu beseitigen. Die Kombination von reintroduce und overload dürfte den Zweck erfüllen, wenn auch mit dem Nachteil dass man den elterlichen Konstruktor overriden und als inherited-Stub anlegen muss. Schön geht halt anders.

Uwe Raabe 14. Jun 2019 11:25

AW: (Falsche?) Warnung beim Überladen eines Konstruktors
 
Zitat:

Zitat von Codehunter (Beitrag 1434640)
Die Kombination von reintroduce und overload dürfte den Zweck erfüllen, wenn auch mit dem Nachteil dass man den elterlichen Konstruktor overriden und als inherited-Stub anlegen muss. Schön geht halt anders.

Ich fürchte, das verstehe ich jetzt nicht so richtig. Mit
Delphi-Quellcode:
reintroduce
bleiben die elterlichen Konstruktoren doch alle sichtbar. Was erfordert denn da den erwähnten inherited-Stub?

Delphi-Quellcode:
uses
  System.Classes;

type
  TAbleitung = class(TComponent)
  public
    constructor Create(AOwner: TComponent; A, B: string); reintroduce; overload;
  end;

constructor TAbleitung.Create(AOwner: TComponent; A, B: string);
begin
  Create(AOwner);
end;

begin
  TAbleitung.Create(nil, '', '');
  TAbleitung.Create(nil);
end.

Codehunter 14. Jun 2019 11:49

AW: (Falsche?) Warnung beim Überladen eines Konstruktors
 
Irgendwie ist heut Freitag... :-D

Also wenn ich irgendeine Methode der Basisklasse habe und in der Kindklasse eine gleichnamige Methode mit reintroduce setze, dann sehe ich genau EINE Methode. Nämlich die der Kindklasse. Hängt dieses Verhalten evtl. von irgendwelchen IDE/Compiler-Einstellungen ab?

Neutral General 14. Jun 2019 12:00

AW: (Falsche?) Warnung beim Überladen eines Konstruktors
 
Zitat:

Zitat von Codehunter (Beitrag 1434645)
Irgendwie ist heut Freitag... :-D

Also wenn ich irgendeine Methode der Basisklasse habe und in der Kindklasse eine gleichnamige Methode mit reintroduce setze, dann sehe ich genau EINE Methode. Nämlich die der Kindklasse. Hängt dieses Verhalten evtl. von irgendwelchen IDE/Compiler-Einstellungen ab?

Es gibt einen Unterschied zwischen reintroduce und (reintroduce mit) overload.

Codehunter 14. Jun 2019 13:25

AW: (Falsche?) Warnung beim Überladen eines Konstruktors
 
Zitat:

Zitat von Neutral General (Beitrag 1434646)
Es gibt einen Unterschied zwischen reintroduce und (reintroduce mit) overload.

Ich sag doch es ist Freitag. Das overload hatte ich vergessen.

Uwe Raabe 14. Jun 2019 13:33

AW: (Falsche?) Warnung beim Überladen eines Konstruktors
 
Zitat:

Zitat von Codehunter (Beitrag 1434645)
Also wenn ich irgendeine Methode der Basisklasse habe und in der Kindklasse eine gleichnamige Methode mit reintroduce setze, dann sehe ich genau EINE Methode. Nämlich die der Kindklasse. Hängt dieses Verhalten evtl. von irgendwelchen IDE/Compiler-Einstellungen ab?

Es ist schon richtig, daß bei einem nur
Delphi-Quellcode:
reintroduce
die inherited Methode nicht zu sehen ist, sondern nur bei der Kombination
Delphi-Quellcode:
reintroduce/overload
. Das
Delphi-Quellcode:
reintroduce
ist ja auch nicht dafür gedacht, eine zusätzliche Version anzubieten, sondern eine virtuelle Methode mit der neuen ohne Fehlermeldung zu überdecken.

Das reine
Delphi-Quellcode:
overload
macht zwar auch beide Versionen sichtbar, aber da kommt es ja zu der besagten Fehlermeldung.

Codehunter 14. Jun 2019 14:40

AW: (Falsche?) Warnung beim Überladen eines Konstruktors
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1434650)
Das
Delphi-Quellcode:
reintroduce
ist ja auch nicht dafür gedacht, eine zusätzliche Version anzubieten, sondern eine virtuelle Methode mit der neuen ohne Fehlermeldung zu überdecken.

Und genau so verwende ich das auch. IMHO finde ich es keinen guten Stil, zwei gleichnamige Konstruktoren aus unterschiedlichen Hierarchieebenen anzubieten. Das deutet oft auf Designfehler hin. Mag sein dass das in anderen Sprachen die Norm ist aber bei Delphi eher nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.
Seite 2 von 2     12   

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