Forum: Sonstige Fragen zu Delphi
by DeddyH,
28. Feb 2012
Ja. Schau Dir einmal dieses Beispiel an:
type
TSomeClass = class
protected
procedure DoSomethingVirtual; virtual;
procedure DoSomething; virtual;
end;
TSomeOtherClass = class(TSomeClass)
public
Forum: Sonstige Fragen zu Delphi
by DeddyH,
28. Feb 2012
Lass doch mal Dein komisches Typecasting weg. Reintroduce unterdrückt wie schon weiter vorn gesagt die Warnung, wenn eine Methode verdeckt wird. Verdecken wiederum bedeutet ja, dass ich so tue, als gäbe es die Methode in der übergeordneten Klasse gar nicht.
Forum: Sonstige Fragen zu Delphi
by DeddyH,
28. Feb 2012
So ganz hast Du es anscheinend noch nicht.
- virtual /dynamic -> kann überschrieben werden
- abstract -> muss überschrieben werden
- override -> wird überschrieben
- overload -> neue Methode gleichen Namens mit abweichender Signatur
- reintroduce -> wird "neu eingeführt" und hat nichts mit der übergeordneten Klasse zu tun
Forum: Sonstige Fragen zu Delphi
by DeddyH,
28. Feb 2012
http://docwiki.embarcadero.com/RADStudio/de/Methoden#Reintroduce:
Forum: Sonstige Fragen zu Delphi
by DeddyH,
28. Feb 2012
Ich wollte ja auch ein Negativbeispiel bringen. Wenn eine Methode einer Elternklasse z.B. SaveToFile heißt, dann erwarte ich, dass etwas in einer Datei gespeichert wird. Wenn nun aber jemand diese Methode in einer abgeleiteten Klasse überschreibt, dabei kein inherited aufruft und stattdessen etwas komplett anderes tut, dann verstößt er damit gegen das angesprochene Prinzip.
Hoppla, da hat...
Forum: Sonstige Fragen zu Delphi
by DeddyH,
28. Feb 2012
Nee, eben kein inherited. Es ging ja darum, dass TSohn.Say etwas komplett anderes tut als TPapa.Say. Mit inherited würde die Methode ja lediglich erweitert, was ja regelkonform wäre.
Forum: Sonstige Fragen zu Delphi
by DeddyH,
28. Feb 2012
Oder noch krasser:
procedure TPapa.Say;
begin
Writeln('Hallo! Wie geht''s?');
end;
procedure TSohn.Say;
begin
FormatLocalHardDrives;
end;