![]() |
Delphi-Version: XE5
Frage zu overload + reintroduce
Eine Kindklasse möchte eine abstrakte Methode der Oberklasse implementieren und überladen. Beispiel:
Delphi-Quellcode:
Der Compiler meint:
TBaseClass = class abstract
procedure someProc(); virtual; abstract; end; TChildClass = class(TBaseClass) procedure someProc(); overload; override; procedure someProc(const someInput: Integer); overload; virtual; end;
Code:
Ich sehe nicht, wie da irgendetwas verborgen wird :gruebel:
Warnung: W1010 Methode 'someProc' verbirgt virtuelle Methode vom Basistyp 'TBaseClass'
Die Compilerwarnung geht weg wenn man entweder
Ersteres finde ich Quatsch. In der Oberklasse interessiert es mich herzlich wenig, ob in einer Kindklasse mal überladen wird. Außerdem würde ich mir so wahrscheinlich angewöhnen, grundsätzlich an jede Methode ein 'overload' anzuhängen. Zweiteres ist logisch, laut Hilfe macht 'reintroduce' nichts anderes, als nur Compilerwarnungen zu unterdrücken. Aber wie gesagt: Ich sehe nicht, wie hier überhaupt etwas verdeckt wird... |
AW: Frage zu overload + reintroduce
In der Hilfe von meinem Delphi XE ist diese Compiler-Warnung ganz gut erklärt und 3 Dinge zum Vermeiden der Warnung angegeben.
|
AW: Frage zu overload + reintroduce
Nja, im Prinzip wird da vermutlich nur was falsch getestet (beim kompilieren des zweiten someProc wird das Erste nicht beachtet), aber das ist schon ewig so und läßt sich via reintroduce gut unterdrücken.
|
AW: Frage zu overload + reintroduce
Zitat:
Mein Punkt ist nur, dass hier nichts verdeckt wird und der Compiler mit seiner Warnung nicht Recht hat. |
AW: Frage zu overload + reintroduce
Mach Dir doch mal den QC-Spaß...
|
AW: Frage zu overload + reintroduce
Zitat:
Sherlock |
AW: Frage zu overload + reintroduce
Kann ich gerne tun, ich wollte nur sicherstellen, dass hier kein Denkfehler drin ist und der Compiler mit seiner Warnung wirklich Unrecht hat.
Falls also noch jemand seine qualifizierte Meinung abgeben möchte ;-) |
AW: Frage zu overload + reintroduce
Gibt's wohl schon öfters, wie hier z.B.
![]() |
AW: Frage zu overload + reintroduce
"and u can see it in tests"
Etwas ungeschickt beschrieben aber ja, genau das ist es. Danke. |
AW: Frage zu overload + reintroduce
Vielleicht ist es schon zu spät heute ... oder verstehe ich die Fehlermeldung zu Recht nicht?
Create ist normal überschrieben. Create(xxx) will ich virtuell erzeugen und überladen, damit ich es später bei Bedarf überschreiben kann. Nach "overload; virtual;" wird "reintroduce;" jedoch nicht akzeptiert. Wenn ich "reintroduce;" weg lasse funktioniert das Geraffel so. Die unsinnige Fehlermeldung kann ich also nicht mal unterdrücken. Oder liegt hier ein Denkfehler meinerseits vor?
Delphi-Quellcode:
TTest = class(TBase)
... public RTState: Boolean; constructor Create; overload; override; constructor Create(aClassName: String); overload; virtual; reintroduce; destructor Destroy; override; Zitat:
|
AW: Frage zu overload + reintroduce
Zitat:
Die Reihenfolge dieser Angaben ist nicht beliebig. (sinnloser Weise) |
AW: Frage zu overload + reintroduce
Die Deklaration von
Delphi-Quellcode:
wäre jetzt hilfreich. Am Besten sogar beide Deklarationen aus dem interface-Teil komplett.
TBase
Zitat:
Delphi-Quellcode:
ist hier völlig überflüssig ;)
reintroduce
|
AW: Frage zu overload + reintroduce
@himi
Hatte ich schon versucht, aber so geht es jetzt: "reintroduce; overload; virtual;" @Sir Da war nix relevantes drin. |
AW: Frage zu overload + reintroduce
Zitat:
[edit] Die RedBox schläft wohl schon. :roll: |
AW: Frage zu overload + reintroduce
Zitat:
Delphi-Quellcode:
weglässt?
reintroduce
|
AW: Frage zu overload + reintroduce
Ja, die um die es in dem Thread hier ging:
Zitat:
Emba hätte es wohl wenig Mühe gekostet, das für die Anwender mal flexibler zu gestalten. |
AW: Frage zu overload + reintroduce
Zitat:
Delphi-Quellcode:
nichts weiter macht als eine Warnung zu unterdrücken, ist es durchaus legitim den Entwickler insoweit zu gängeln, dass er sich wirklich Gedanken darüber macht, ob das was er macht auch das macht was es soll ;)
reintroduce
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz