Currywurst hat folgendes geschrieben: |
wie kann ich das also sauber(!) umgehen?
|
Es geht, aber ob es "sauber" genug für deine Zwecke ist, überlasse ich Dir zu beurteilen. Du vergleichst die Methodenzeiger der Methode der Basisklasse und der Methode der abgeleiteten Klasse. Sind sie nicht identisch wurde die Methode überschrieben.
Der Harken dabei ist, dass die abgeleitete Klasse direkt den Vorfahr ansprechen und kennen muß der die abstrakte Methode einführt. Nicht unbedingt saubers OOP
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TTestA.Test; var ThisMethod: TMethod; BaseMethod: TMethod; p: Pointer;
begin MethodCall(ThisMethod) := self.virtAbst; p := pointer(TTestA); MethodCall(BaseMethod) := TTestA(@p).virtAbst; if BaseMethod.Code <> ThisMethod.Code then virtAbst; end; |