Autor Beitrag
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 23.04.10 03:14 
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:
ausblenden volle Höhe 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

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Fr 23.04.10 04:52 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 23.04.10 08:15 
Cool, geht. Hät nich gedacht, dass das so einfach is^^ DANKESCHÖN!

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^