Wenn ich vergessen habe, die Schlüsselwörter 'virtual' und 'override' hinzuzufügen, hätte ich eine Compiler-Warnung erwartet, wenn ich versehentlich den gleichen Namen für eine verwendet habe Prozedur in einer abgeleiteten Klasse. Ich habe keine und jetzt verstehe ich nicht warum. Was muss ich tun, um Warnungen zum Ausblenden von Basiselementen und Methoden zu erhalten?Der Compiler gibt keine Warnung beim Ausblenden von Membervariablen und/oder Prozeduren aus
Nach this answer (von Jim McKeeth, der zweifellos richtig ist):
Wenn Sie eine Methode in einer abgeleiteten Klasse deklarieren, die den gleichen Namen wie eine Methode in einem Vorfahren Klasse hat dann steckst du, dass Vorfahrmethode - das heißt, wenn Sie eine Instanz dieser Nachkommenklasse haben (auf die als diese Klasse verwiesen wird), erhalten Sie nicht das Verhalten des Vorfahrs. Der Compiler wird Sie warnen.
jedoch dieser Code zu meiner Überraschung nicht geben Sie mir eine Warnung:
unit Unit1;
interface
{$WARNINGS ON}
{$WARN HIDING_MEMBER ON}
{$WARN HIDDEN_VIRTUAL ON}
// I understand the two lines above are superfluous.
// I put them there to demonstrate that I have tried to enable these
// warnings explicitly.
type
TBase = class
public
SomeMember: integer;
procedure Foo;
end;
type
TDerived = class (TBase)
public
SomeMember: integer;
procedure Foo;
end;
implementation
{ TBase }
procedure TBase.Foo;
begin
end;
{ TDerived }
procedure TDerived.Foo;
begin
end;
end.
Ich bin mit Delphi XE und mein Compiler sagt alles ist in Ordnung:
Projektabhängigkeiten zu prüfen. .. Erstellen von Project1.dproj (Debug, Win32) dcc-Befehlszeile für "Project1.dpr" c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ bin \ dcc32.exe - $ O- - $ W + - $ YD --no-config -B -Q -AWinTypes = Wind Windows, WinProcs = Windows, DbiTypes = BDE; DbiProcs = BDE; DbiErrs = BDE -DDEBUG -E "C: \ Compiler-Ausgabe" -I "c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ lib \ Win32 \ debug"; "c: \ Programm Dateien \ embarcadero \ radstudio \ 8.0 \ RaveReports \ Lib ";" c: \ programmdateien \ embarcadero \ radstudio \ 8.0 \ lib \ win32 \ debug ";" c: \ programmdateien \ embarcadero \ rad studio \ 8.0 \ Imports " ; "C: \ Benutzer \ Öffentlich \ Dokumente \ RAD Studio \ 8.0 \ Dcp"; "c: \ Programme \ Embarcadero \ rad Studio \ 8.0 \ include"; "C: \ Programme Files \ Raize \ CS4 \ Lib \ RS-XE ";" c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ lib \ win32 \ Veröffentlichung ";" c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ RaveReports \ Lib "-LE" C: \ Benutzer \ Öffentlich \ Dokumente \ RAD Studio \ 8.0 \ Bpl "-LN" c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ bin \ Dcp " -N0" C: \ Compiler-Ausgabe \ DCU "-O" c : \ program files \ embarcadero \ radstudio \ 8.0 \ Imports ";" C: \ Benutzer \ Öffentlich \ Dokumente \ RAD Studio \ 8.0 \ Dcp "; "c: \ program Dateien \ embarcadero \ rad Studio \ 8.0 \ include"; "C: \ Programme \ Raize \ CS4 \ Lib \ RS-XE"; "c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ lib \ win32 \ release "; "c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ RaveReports \ Lib" -R "c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ Imports"; "C: \ Benutzer \ Öffentlich \ Dokumente \ RAD Studio \ 8.0 \ Dcp ";" c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ include ";" C: \ Programme \ Raize \ CS4 \ Lib \ RS-XE ";" c: \ Programme \ embarcadero \ rad studio \ 8.0 \ lib \ win32 \ release ";" c: \ programmdateien \ embarcadero \ radstudio \ 8.0 \ RaveReports \ Lib "-U" c: \ programmdateien \ embarcadero \ rad studio \ 8.0 \ lib \ Win32 \ debug ";" c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ RaveReports \ Lib ";" c: \ Programme \ embarcadero \ rad studio \ 8.0 \ lib \ win32 \ debug ";" c: \ program files \ embarcadero \ radstudio \ 8.0 \ Imports ";" C: \ Benutzer \ Öffentlich \ Dokumente \ RAD Studio \ 8.0 \ Dcp ";" c: \ program Dateien \ embarcadero \ rad Studio \ 8.0 \ include "; "C: \ Programme \ Raize \ CS4 \ Lib \ RS-XE"; "c: \ Programme \ Embarcadero \ rad st udio \ 8.0 \ lib \ win32 \ release "; "c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ RaveReports \ Lib" -K00400000 -NB "c: \ Programme \ embarcadero \ rad Studio \ 8.0 \ bin \ Dcp" -NH "C: \ Benutzer \ Öffentlich \ Dokumente \ RAD Studio \ 8.0 \ hpp "-NO" C: \ Compilerausgabe \ DCU "Project1.dpr Erfolg Verstrichene Zeit: 00:00:00.2
Meine Vermutung ist, dass ich entweder das oben genannte Zitat von Jim McKeeth falsch verstanden oder ich habe einige Einstellung in meinem Compiler, ich bin mir nicht bewusst (teste ich habe es auf einem anderen Computer durch die Art und Weise, gleiche Ergebnisse) . Jede Hilfe würde sehr geschätzt werden.
Die referenzierte Antwort war falsch, wie auch einige andere Antworten auf diese Frage. Ich habe die Ungenauigkeiten in dieser Antwort behoben. –