![]() |
Re: Kind as Opa innerhalb der Deklerartion
Habs getestet mit
Delphi-Quellcode:
Opa, Vater und Kind haben ein Unterschiedliches Alter. Wenn Alter eine Konstante ist geht es. Wenn nicht, dann ist Alter = 0. Das ist mir klar. Und natürlich die Limitation an dem ganzen. Wird ja nirgendwo zugewiesen. Und wenn dann würde es auch nix bringen, weil man ja auf die KLasse und nicht auf das Objekt zugreift. Hab ich das richtig verstanden?
TOpa = class
public alter : integer; procedure tuwas; end; procedure TOpa.tuwas; begin showmessage('Großvater '+inttostr(self.alter)); end; PS: Bin mal für einige Zeit weg... |
Re: Kind as Opa innerhalb der Deklerartion
Zitat:
Edit: Ein mov eax,self dürfte allerindg schon reichen. Das sind aber reichlich Verrenkungen. |
Re: Kind as Opa innerhalb der Deklerartion
Hallo,
abgesehen von möglichen Designfehlern in der Klassenhierarchie - wäre es nicht am einfachsten, dem fleißigen Opa eine weitere, nicht-virtuelle Methode zu spendieren?
Delphi-Quellcode:
Die neue Methode kann in allen abgeleiteten Klassen direkt aufgerufen werden.
type
TOpa = class procedure TuWas; virtual; procedure OpaTutWas; end; procedure TOpa.TuWas; begin OpaTutWas; end; procedure TOpa.OpaTutWas; begin // die eigentlichen Aktionen end; [...] procedure TKind.TuWas; begin OpaTutWas; end; Gruß Hawkeye |
Re: Kind as Opa innerhalb der Deklerartion
Die Methode von Hawkeye219 funktioniert zwar,
aber wenn jetzt TOpa eine Klasse aus Delphi wie TMemo u.a. wäre, könnte man nicht einfach die Source ändern :wink: . Aber ich bin auch darauf gespannt, ob so was mit asm möglich ist. ALso so inetwa wie das hier:
Delphi-Quellcode:
asm
mov eax, self; call TOpa.MeinName; end; |
Re: Kind as Opa innerhalb der Deklerartion
Zitat:
|
Re: Kind as Opa innerhalb der Deklerartion
Delphi-Quellcode:
:P
procedure TKind.MeinName;
var i:Integer; begin asm pushad end; for i:=0 to 0 do showmessage('Damit es nicht durch Zufall doch klappt'); asm popad call TOpa.MeinName end; ShowMessage( '(Kind:) a gugugugu' ); end; |
Re: Kind as Opa innerhalb der Deklerartion
Ich hab alles gelesen meine Frage war, ob durch dieses MOV danach auch die
Varaible self in TOpa.TuWas zu gebrauchen ist. :? |
Re: Kind as Opa innerhalb der Deklerartion
Zitat:
|
Re: Kind as Opa innerhalb der Deklerartion
Zitat:
Edit: Sorry, den hatte ich editiert.... :pale: @Aphton:
Delphi-Quellcode:
Aber mach doch, wie ich schon schrieb, ein mov eax,self direkt vor den Aufruf.
procedure TKind.MeinName;
var i:Integer; s:string; begin asm pushad end; s:='test'; for i:=0 to 0 do showmessage('Damit es nicht durch Zufall doch klappt'); asm popad call TOpa.MeinName end; ShowMessage( '(Kind:) a gugugugu' +s); end; |
Re: Kind as Opa innerhalb der Deklerartion
Etwas gekünstelt könnte man es so machen:
Delphi-Quellcode:
interface
type TOpa = class (TObject) public procedure SachWas (ARecurse : Integer = 0); virtual; end; TVater = class (TOpa) public procedure SachWas (ARecurse : Integer = 0); override; end; TSohn = class (TVater) public procedure SachWas (ARecurse : Integer = 0); override; end; implementation { TOpa } procedure TOpa.SachWas (ARecurse: Integer = 0); begin ShowMessage ('Hallo Jungs!') end; { TVater } procedure TVater.SachWas (ARecurse: Integer = 0); begin if ARecurse > 0 then inherited SachWas (ARecurse - 1) else ShowMessage ('Hallo Bub!') end; { TSohn } procedure TSohn.SachWas (ARecurse: Integer = 0); begin if ARecurse > 0 then inherited SachWas (ARecurse - 1) else ShowMessage ('GuGu!') end; procedure AlleSagenWas(Sender: TObject); var kind : TSohn; begin kind := TSohn.Create; try kind.SachWas; kind.SachWas(1); kind.SachWas(2); finally kind.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 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