
Zitat von
negaH:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
...
TRectangle(Figure).Show('TFigure.Create / TRectangle(Figure).Draw');
...
Ich habe das Tut nicht gelesen, gebe aber Sakura absolut Recht. Dieses Beispiel ist ein absolutes Negativbeispiel wie man es auf garkeinen Fall machen sollte. Es könnte aber als Eingangs-Beispiel für die Vermeidung von harten TypCast bei Klassen dienen. Denn so wie nachfolgend wäre der TypCast
OOP konform richtiger gewesen:
Delphi-Quellcode:
(Figure as TRectangle).Show;
Dieser Typcast würde dann eine
Exception zu Laufzeit erzeugen, das TFigure NICHT von TRectangle abgeleitet wurde, und somit auf diesen offensichtlichen Programmierfehler hinweisen.
Gruß Hagen
Übrigens TFigure ist auch nicht von TRectangle abgeleitet, sondern umgekehrt :grins:
Und die
Exception gibts in dem Fall hoffentlich nur wenn es sich um statische Bindung handelt, bei dynamischer bzw. virtueller Bindung erwart ich mir, dass ich da keine bekomme...
Und wie wärs mit...
Delphi-Quellcode:
if (Figure is TRectangle) then
TRectangle(Figure).Show;
Da würdest schon zur Compiletime merken, wenn TRectangle nicht von TFigure abgeleitet ist.