AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language DCC W1010: Ich verberge nichts, dennoch wird gemeckert
Thema durchsuchen
Ansicht
Themen-Optionen

DCC W1010: Ich verberge nichts, dennoch wird gemeckert

Ein Thema von himitsu · begonnen am 25. Nov 2010 · letzter Beitrag vom 26. Nov 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

DCC W1010: Ich verberge nichts, dennoch wird gemeckert

  Alt 25. Nov 2010, 11:16
Delphi-Version: 2010
Code:
[DCC Warnung] ...: W1010 Methode '...' verbirgt virtuelle Methode vom Basistyp '...'
[DCC Warning] ...: W1010 Method '...' hides virtual method of base type '...'

Delphi-Quellcode:
TSingleton = Class
  Constructor Create; Virtual;
End;

TDemoSingleton = Class(TSingleton)
  Constructor Create;                 Overload; Override;
  Constructor Create(Param: Integer); Overload;
End;
Das Konstrukt ist so gewollt.

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 Delphi-Referenz durchsuchenreintroduce eingefallen.

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?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: DCC W1010: Ich verberge nichts, dennoch wird gemeckert

  Alt 26. Nov 2010, 08:33
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: DCC W1010: Ich verberge nichts, dennoch wird gemeckert

  Alt 26. Nov 2010, 11:21
Die Methoden werden nicht im Kontext gesehen beim Kompilieren, sondern einzeln.
Nochwas, weswegen der Compiler so Einiges an Überholung bedarf.

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.
Nein, da wird auch nichts verdeckt, da das parameter Create immernoch "sichtbar" ist.
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.

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.
Virtual, Dynamic steuern ob eine Methode überschreibbar ist
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr.
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