Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Wie Greife ich auf Methode der Vor vor gänger klasse zu ? (https://www.delphipraxis.net/79291-wie-greife-ich-auf-methode-der-vor-vor-gaenger-klasse-zu.html)

Corpsman 19. Okt 2006 20:56


Wie Greife ich auf Methode der Vor vor gänger klasse zu ?
 
Hi Leuts,

Habe folgenden Code :

Delphi-Quellcode:
Type
  a = Class
   Procedure d;virtual;
  end;
  b = Class(a)
   Procedure d;override;
  end;
  c = Class(b)
   Procedure d;override;
  end;
und beim Ausprogrammieren mache ich nun

Delphi-Quellcode:
Procedure c.d;
begin
  inherited d;
end;
Die Procedur c.d würde nun b.d aufrufen.

Was aber, wenn ich das nicht will, sondern ich eigentlich a.d aufrufen wollte ohne b.d

bisher muste ich immer her gehen und den Inherited Teil Löschen und den Code von a.d rauskopieren und dann bei c.d einfügen. Aber das mus doch auch besser gehn, oder ?

3_of_8 19. Okt 2006 20:58

Re: Wie Greife ich auf Methode der Vor vor gänger klasse zu
 
Ich glaube nicht, dass du die vererbte Methode der vererbten Methode aufrufen kannst. Ich kann mir auch keine Anwendung dafür vorstellen, zumindest hatte ich noch nie eine.

Ein Workaround wäre, die Methode in der a oder in der b anders zu nennen.

mkinzler 19. Okt 2006 21:00

Re: Wie Greife ich auf Methode der Vor vor gänger klasse zu
 
Ein solches Konstrukt würde auch dem sinn der OOP widersprechen, da hier die Wahrscheinlichkeit groß ist, daß IS_A Beziehung verletzt wird.

Corpsman 19. Okt 2006 21:06

Re: Wie Greife ich auf Methode der Vor vor gänger klasse zu
 
Ich habe das andauernd

wer mein Speil Balanced kennt.

Da gibt es sehr ähnliche Elemente. D.h ich habe z.b. einen Stein gemacht der hat 1 bewegliches und mehrere Starre Objecte

nun teilen die sich eine sehr Komplexe Datenstruktur.

und diese Struktur mus ich dann drehen können.

Das Prob ist nu wenn ich nun mehrere solche Objecte hintereinander Ableite und das Letze dann drehen mus wäre es cool wenn das die Rot function der Ursprünglich Klasse aufruft und nicht das der Vorgängerklasse da die dann nicht mehr geht.

Ich habe übrigens schon ne Lösung so ist das nicht, aber die ist etwas zu Kompliziert :

Delphi-Quellcode:
type

  a =Class
  published
    procedure d;virtual;
  end;
 
  b =Class(a)
    procedure d;Override;
  end;
 
  C =Class(b)
  procedure d;Override;
  end;
 
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm} 
 
Procedure A.d;
begin
  showmessage('A');
end;
 
Procedure B.d;
begin
  Showmessage('B');
end;
 
 
 
Procedure C.d;
type TExecute = Procedure of Object;
 
var P : TMethod;
    E : TExecute;
begin
  P.Data := Self;
  P.Code := A.MethodAddress('d');
  if Assigned(P.Code) then
  begin
    try
     E := TExecute(P);
     E; //call method
    except
    end;
  end;
 
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
var aC : C;
begin
  aC := C.Create;
  aC.D;
  halt;
end;
@mkinzler

IN java geht sowas anscheinend Problemlos

mkinzler 19. Okt 2006 21:10

Re: Wie Greife ich auf Methode der Vor vor gänger klasse zu
 
- du könntest es mit
Delphi-Quellcode:
(self as <Klasse>).<Methode>
versuchen.
Aber wie gesagt stimmt dann das Vererbungsschema nicht, wenn soetwas notwendig wird.

Corpsman 19. Okt 2006 21:17

Re: Wie Greife ich auf Methode der Vor vor gänger klasse zu
 
Cool es geht.

THX.

Was die Vererbungsreihenfolge angeht. So bin ich mir da nicht sicher ob das unbedingt falsch sein mus.

Man stelle sich vor.

Ich habe eine Klasse A

Leite die in B ab Erweitere b um sehr viel

Leite B in C ab und will in C alles was b hat auser eben eines speziellen Features das Blöderweise in A ist und aber von B überschrieben wird.

und diese Aktion die ich hier versuche , passiert nur asu der Faulheit B wieder mit altem Code zu überschrieben.

3_of_8 19. Okt 2006 21:22

Re: Wie Greife ich auf Methode der Vor vor gänger klasse zu
 
Zitat:

Zitat von mkinzler
- du könntest es mit
Delphi-Quellcode:
(self as <Klasse>).<Methode>
versuchen.
Aber wie gesagt stimmt dann das Vererbungsschema nicht, wenn soetwas notwendig wird.

Ich kann mir nicht vorstellen, dass das funktioniert, nämlich aufgrund des Prinzips der dynamischen Methodenbindung.

Der Upcast hilft da IMHO auch nichts. Sollte es doch funktionieren, habe ich wohl bei der Programmieren I-Vorlesung doch zu viel Tetris gespielt.

mkinzler 19. Okt 2006 21:26

Re: Wie Greife ich auf Methode der Vor vor gänger klasse zu
 
Es besteht natürlich ein unterschied zwischen Theorie und Praxis.

3_of_8 19. Okt 2006 21:31

Re: Wie Greife ich auf Methode der Vor vor gänger klasse zu
 
Das heißt?

mkinzler 19. Okt 2006 21:37

Re: Wie Greife ich auf Methode der Vor vor gänger klasse zu
 
Zitat:

Zitat von 3_of_8
Das heißt?

Das bezog sich auf #6:
Ein Klassenschema, daß der reinen Theroie widerspricht kann in der Praxis u.U. trotzdem bestehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz