![]() |
Delphi-Version: 2010
DCC W1010: Ich verberge nichts, dennoch wird gemeckert
Code:
[DCC Warnung] ...: W1010 Methode '...' verbirgt virtuelle Methode vom Basistyp '...'
[DCC Warning] ...: W1010 Method '...' hides virtual method of base type '...'
Delphi-Quellcode:
Das Konstrukt ist so gewollt.
TSingleton = Class
Constructor Create; Virtual; End; TDemoSingleton = Class(TSingleton) Constructor Create;                 Overload; Override; Constructor Create(Param: Integer); Overload; End; Das neue Create ruft auch das aktuelle virtuelle Create auf. Und verdeckt wird auch nichts, da sich ja die Parameter unterscheiden. Wenn ich das parameterlose Create ohne override deklariert hätte, dann hätt ich diese Fehlermeldung ja akzeptiert. Wie kann ich nun diese Fehlermeldung für genau diesen Fall abschalten? Mir ist grade wieder das ![]() Gut, aber dennoch die Frage: Warum wird gemeckert, obwohl nichts verdeckt wird? Und die Reihenfolge dieser Direktiven versteh' ich och nicht. Wieso muß reintroduce vor overload angegeben werden und virtual/override nach overload? Diese reintroduce, virtual und override sind doch von der selben Art. Und wieso kann man sich die Reihenfolge nicht aussuchen? |
AW: DCC W1010: Ich verberge nichts, dennoch wird gemeckert
Die Methoden werden nicht im Kontext gesehen beim Kompilieren, sondern einzeln. Nimmst du den parameterlosen Konstruktor in TDemoSingleton weg, siehst du, warum er meckert. Weil der Konstruktor mit Parameter in TDemoSingleton in der Tat den parameterlosen Konstruktor in TSingleton verdeckt.
Reintroduce macht nix anderes als die Warnung, dass diese Methode eine andere verdeckt, zu unterdrücken. Daher ist es nicht von der gleichen Art, wie virtual und override. |
AW: DCC W1010: Ich verberge nichts, dennoch wird gemeckert
Zitat:
Zitat:
Wenn ich beim neuen Parameterlosen der Override vergessen hätte oder Diesen ebenfalls als Virtual/Dynamic deklariert hätte, dann hätt ich's ja verstanden, weil's dann wirklich verdeckt wäre und man denken könnte, daß neue Felder nicht ausreichend initialisiert würden, wenn man das originale Create aufruft. Zitat:
Overide überschreibt und Reintroduce steuert die zugehörige Fehlermeldung (überschreiben zum Vorfahre). Overload steuert aber das Überladen innerhalb der eigenen Klasse. Ich rücke gern mal gleiche/ähnliche Dinge untereinander, damit es übersichtlicher wird. Hier geht das nicht, Aufgrund der unterschiedlichen Reihenfolge. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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-2025 by Thomas Breitkreuz