Hallo MaBuSE,
@Chris: Das geht leider nicht, da ich das alte Verhalten ja durchaus wünsche, wenn (True) übergeben wurde. Außerdem sollte man wenn man es so macht das Schlüsselwort reintreduce verwenden um zu dokumentieren, dass man genau das machen möchte und nicht aus versehen virtual/override vergessen hat.
reintroduce
bin ich zu 100% bei dir. Der Quelltext funktioniert aber tatsächlich, wenn du es so machst - zumindest bei mir XE5.
Delphi-Quellcode:
TMutter = class(TObject)
public
procedure a(x: Boolean); virtual;
procedure b;
end;
TKind = class(TMutter)
public
procedure a(x: Boolean); override;
procedure b;reintroduce;
end;
//....
procedure TMutter.a(x: Boolean);
begin
Log('TMutter.a1');
if x then
begin
// b aufrufen. (Wenn Self = TKind ist, dann wird TKind.b aufgerufen.)
TKind(Self).b;
end
else
begin
// Hier sollte immer TMutter.b aufgerufen werden!!!
TMutter(Self).b;
end;
Log('TMutter.a2');
end;
Oder is dir das zu explizit?
Gruß, Chris