Morgen.
Ich habe gerade eine recht... seltsame Entdeckung bei der Überschreibung von Properties gemacht.
Es sieht so aus, als würde der Compiler sich gar nicht erst überlegen, ob er die Property der Oberklasse oder die der Unterklasse nimmt. Ich kann das Vorgehen des Compilers zwar verstehen, aber eigentlich müsste er doch bei einer Situation wie der in meinem Testprojekt einen eigenen Eintrag in der
VMT anlegen und dann da nachschauen...
Folgende Klassen:
Delphi-Quellcode:
type
TA=class
protected
FFoo: Integer;
public
property Foo: Integer
read FFoo
write FFoo;
end;
TB=class(TA)
public
procedure SetFoo(AFoo: Integer);
property Foo: Integer
read FFoo
write SetFoo;
end;
implementation
procedure TB.SetFoo(AFoo: Integer);
begin
FFoo:=AFoo;
showmessage('
Wuppdi');
end;
Jetzt folgender Code:
Delphi-Quellcode:
var a: TB;
begin
a:=TB.Create;
a.Foo:=42;
end;
Es kommt wie erwartet die Messagebox. Kleine Änderung:
Delphi-Quellcode:
var a: TA;
begin
a:=TB.Create;
a.Foo:=42;
end;
Keine Messagebox. Der Compiler beschreibt einfach FFoo und ruft SetFoo nicht auf.
Mich würde auch interessieren, ob sich das bei neueren Delphiversionen reproduzieren lässt.