![]() |
AW: Inherited "überspringen"?
Ich würde das lieber so sauber wie eben möglich ohne Assembler lösen:
Delphi-Quellcode:
uses
System.Rtti, System.TypInfo; procedure Unterklasse2.Proc; begin System.Rtti.Invoke(@Oberklasse.Proc, TArray<TValue>.Create(TValue.From<Unterklasse2>(Self)), ccReg, nil); end; |
AW: Inherited "überspringen"?
Außer den Möglichkeiten von Uwe und Jaenike hab ich keine weiteren gefunden.
Da du aber Unterklasse2 eh nur wegen eines Fehlers in Unterklasse1 baust, warum leitest du das ganze nicht direkt von Oberklasse ab ? Dann kann Unterklasse1 über die Klinge springen. |
AW: Inherited "überspringen"?
Zitat:
Mein spezifisches Problem war anders lösbar, weil die Oberklasse.Proc nen Einzeiler mit nem Zugriff auf eine Published Property war (check auf Ereignisbehandlung) und ich das deshalb schmerzfrei nachbauen konnte. Die Diskussion interessiert mich dennoch. Ähnliche Fälle werden in Zukunft wahrscheinlich nochmal auftreten. Zitat:
|
AW: Inherited "überspringen"?
Noch eine Dritte Variante ohne Assembly oder RTTI:
Delphi-Quellcode:
{ TA }
procedure TA.X(I: Integer); begin ShowMessage('1: ' + I.ToString); end; { TB } procedure TB.X(I: Integer); begin inherited; ShowMessage('2: ' + I.ToString); end; { TC } procedure TC.X(I: Integer); type TProc = procedure(Sender: TA; I: Integer); begin //inherited; TProc(@TA.X)(Self, I); ShowMessage('3: ' + I.ToString); end; |
AW: Inherited "überspringen"?
Nein. Solltest du meiden.
Es gibt in C++ diese Art des Aufrufs, mit dem wird aber im Falle von Multiple Inheritance zwischen den Base Classes unterschieden in erster Linie. Gute Frage wäre ob du nicht einfach ein Objekt der entfernten Basisklasse erzeugst und das Ergebnis verwendest. Ob das Sinn macht sei dahingestellt. Ich würde nicht ausschließen, ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz