Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Denkblockade bei Klassenentwicklung


Bergmann89 - Fr 23.04.10 03:14
Titel: Denkblockade bei Klassenentwicklung
Hey,

ich hab grad n neues Projekt angefangen und hab da grad irgendwie ne Denkblockade. Ich hab ne Klasse (TContainer), die kann Objekte(TBasic) besitzen und muss mit derren Methoden arbeiten. Dann hab ich noch paar Klassen, die von TBasic erben und die Methoden überschreiben (TSpecial). Wie bekomm ich es nun hin, dass wenn ein TContainer-Objekt eine Methode aufruft die Mehtode von TSpecial ausgeführt wird und nicht die von TBasic?
Vlt das Ganze nochma als Quelltext, damit mans besser verstehen kann:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
type
  TBasic = class
    procedure Test;
  end;

  TSpecial = class(TBasic)
    procedure Test;
  end;

  TContainer = class
    fList: TList; //Liste der Tbasic-Objekte
    procedure CallAllTests;
  end;

procedure TBasic.Test;
begin
  ShowMessage('Basic');
end;

procedure TSpecial.Test;
begin
  inherited Test;  
  ShowMessage('Special');
end;

procedure TContainer.CallAllTests;
var i: Integer;
begin
  for i := 0 to fList.Count-1 do 
    (fList[i] as TBasic).Test;
end;
Mit diesem Code würde immer nur 'Basic' als Meldung kommen, ich will aber das 'Special' kommt. Geht das irgendwie?

MfG & Thx Bergmann.


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Fr 23.04.2010 um 09:28


Tryer - Fr 23.04.10 04:52


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type
  TBasic = class
    procedure Test; virtual;
  end;

  TSpecial = class(TBasic)
    procedure Test; override;
  end;


Grüsse, Dirk


Bergmann89 - Fr 23.04.10 08:15

Cool, geht. Hät nich gedacht, dass das so einfach is^^ DANKESCHÖN!