![]() |
Re: Kind as Opa innerhalb der Deklerartion
Oja, das hilft!
Und damit hat die Frage sich wirklich ausgezahlt. Auch wenn sie in ihrer Ursprungsform irgendwie nicht so besonders sinnvoll erscheint. (Normal hätte ich einfach bei TVater eine weitere Methode eingeführt und nicht jene von TOpa überschrieben.) Manche Dinge versteht man erst richtig, wenn man ihre Grenzen findet. Achja, warum sind die Bezichnungen Opa, Vater und Kind ungünstig gewählt? Dachte nur, dass so der Stammbaum schnell ersichtlich ist. Bin aber was Namensgebung betrifft irgendwie sehr schleißig sollte ich ändern :wink: |
Re: Kind as Opa innerhalb der Deklerartion
Delphi-Quellcode:
TOpa = class
public procedure MeinName(); virtual; end; TVater = class( TOpa ) public procedure MeinName(); override; end; TKind = class( TVater ) public procedure MeinName(); override; end; ... procedure TForm1.FormCreate(Sender: TObject); var k: TKind; begin k := TKind.Create; k.MeinName; k.Free; end; { TOpa } procedure TOpa.MeinName; begin ShowMessage( 'Ich bin dein Opa' ); end; { TVater } procedure TVater.MeinName; begin inherited; ShowMessage( 'Ich bin dein Vater, krchh (:D)' ); end; { TKind } procedure TKind.MeinName; begin // inherited; asm call TOpa.MeinName end; ShowMessage( '(Kind:) a gugugugu' ); end; |
Re: Kind as Opa innerhalb der Deklerartion
Hey, das ist cool und funktioniert!
Wie bist Du auf die Idee gekommen und noch viel wichtiger: Warum geht das mit Inline-Assembler? Edit: Okay, ich kanns mir vorstellen warum. Angelegt wird die Methode ja irgendwo. Und mit call springt man halt zu eben jener. |
Re: Kind as Opa innerhalb der Deklerartion
Wie bin ich auf die Idee gekommen?
Hab einfach das Projekt debuggt, und gesehen, wie ein inherited Aufruf in Assembler aussieht. Warum funktioniert das? :firejump: MfG |
Re: Kind as Opa innerhalb der Deklerartion
@Aphton
Das funktioniert nicht! Greif mal in TOpa.MeinName auf self zu (Also lass dir irgendein sinnvolles Feld einfallen)! Ansonsten kannst du auch MeinName als Klassenmethode deklarieren, dann geht es auch ohne ASM. Edit: Aber eine Klassenmethode ist ja nicht das Ziel. Edit2: Folgende Änderung:
Delphi-Quellcode:
TOpa = class
private x:Integer; public procedure MeinName(); virtual; end; //und: procedure TOpa.MeinName; begin x:=5; ShowMessage( 'Ich bin dein Opa' ); end; procedure TKind.MeinName; var i:Integer; begin for i:=0 to 0 do showmessage('Damit es nicht durch Zufall doch klappt'); asm call TOpa.MeinName end; ShowMessage( '(Kind:) a gugugugu' ); end; |
Re: Kind as Opa innerhalb der Deklerartion
Zitat:
|
Re: Kind as Opa innerhalb der Deklerartion
Zitat:
|
Re: Kind as Opa innerhalb der Deklerartion
Nö, das tut es nicht.
Ich nehme mal an, per Inline Asm ruft man da direkt im Proc-Chain die Methode(Proc/Func) auf, da ja bei der Vererbung den erbenden Klassen alle Methoden der Parentklasse zur Verfügung stehen. Aber ich rate nur blöd rum... Deshalb halte ich mich an mein Avater :D MfG |
Re: Kind as Opa innerhalb der Deklerartion
Zitat:
Und bei einer Klassenmethode gänge es auch ohne, ja. Aber hier ging es ja um virtuelle Methoden. |
Re: Kind as Opa innerhalb der Deklerartion
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 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