Autor Beitrag
Astraios
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 25



BeitragVerfasst: Fr 27.12.02 18:05 
Hallo,

ich habe ein kleines bis mittelgroßes Problem in Sachen Überschreiben von Prozeduren.

Ich habe eine Klasse (TUrKlasse) mit der Prozedur "machwas".

Jetzt habe ich eine andere Klasse (TNeueKlasse), die von TUrKlasse abgeleitet wird:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  TUrKlasse = class
  procedure irgendwas;
  procedure machwas(Param: String);
  end;


  TNeueKlasse = class(TUrKlasse)
  procedure machwas(Param: String);
  end;


Wenn ich TNeueKlasse.machwas('x') aufrufe, wird sicherlich die neu deklarierte Prozedur aufgerufen - nur ist es in meinem Fall so, dass die Prozedur machwas von einer anderen Prozedur aus der Klasse TUrKlasse aufgerufen wird:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TUrKlasse.irgendwas;
begin
   machwas('x');
end;

procedure TUrKlasse.machwas(Param: String);
begin
  Showmessage('original');
end;

procedure TNeueKlasse.machwas(Param: String);
begin
  Showmessage('neue Klasse');
end;


Wenn die Proz. irgendwas nun "machwas" aufruft soll aber der neue Quellcode und nicht der alte ausgeführt werden...
ich hab schon versucht, "machwas" als virtual zu deklarieren und sie dann mit override zu überschreiben - hat nix gebracht. Es wurde immer der "alte" Quelltext ausgeführt.

Ich hoffe, es ist überhaupt möglich, was ich vor hab - und der ein oder andere weiß, wie's geht.

Also danke schon mal im Voraus.

Astra
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 27.12.02 20:16 
Soweit ich das noch in Erinnerung habe, geht das so nicht. Wenn eine externe Prozedur die UrKlasse verwendet, werden nur dort die Prozeduren verwendet, NeueKlasse ist ja ein Nachfahre davon, d.h. die externe Prozedur müsste NeueKlasse verwenden.
Aber ich bin mir gerade nciht sicher (und hab auch keine Zeit mehr nachzuschauen), ob Du dann nicht in der NeueKlasse die Prozedur irgendwas überschreiben musst, das musste dann halt ausprobieren.

Gruß
Astraios Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 25



BeitragVerfasst: Sa 28.12.02 17:41 
Titel: Ich bin dumm
Ich bin dumm!
Natürlich geht's!

Ich mach die TUrKlasse.machwas virtual und die TNeueKlasse.machwas override und dann geht's... hab einfach anderswo nen Wurm drin gehabt...