Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem beim schreiben einer Listenklasse (https://www.delphipraxis.net/109172-problem-beim-schreiben-einer-listenklasse.html)

hugo1990 25. Feb 2008 16:29


Problem beim schreiben einer Listenklasse
 
Also ich stehe vor folgendem Problem, ich möchte eine Klasse schreiben, ähnlich der TStrings.
Ich möchte z.B. folgendes machen können.
Delphi-Quellcode:
...
var Files: TFiles;
begin
...
  Files.Add(Filename);
  Files[0].Test('blablabla');
end;
Ich hoffe man sieht, was ich machen möchte. Kann mir jemand sagen, wie ich dabai vorgehen muss.

shmia 25. Feb 2008 16:45

Re: Problem beim schreiben einer Listenklasse
 
Du musst deine Listenklasse von TList oder besser noch von TObjectList ableiten.
Dann braucht du noch eine Klasse für die Einzelobjekte:
Delphi-Quellcode:
TFileObj=class(TPersistent)
public
  procedure Test(const s:string);
end;

Jelly 25. Feb 2008 16:45

Re: Problem beim schreiben einer Listenklasse
 
Für Liste kannst du am einfachsten die Klasse TObjectList nehmen.
Zitat:

Zitat von hugo1990
Delphi-Quellcode:
var Files: TFiles;
begin
...
  Files.Add(Filename);
  Files[0].Test('blablabla');
end;

Allerdings so, wie du dir das hier vorstellst, wird es nicht so leicht gehen.

TObjectList kann beliebige Objekte aufnehmen. Über Files[0] implizierst du jedoch bereits ein korrektes Casting. Das geht so nicht, aber folgendes wäre möglich, sofern eine TFile Klasse bekannt ist, und auch wirklich nur TFile Objekte in deiner Liste sind:

Delphi-Quellcode:
TFile(Files[0]9.Test('bla') ;
Wenn du das Ganze typsicher machen willst, dann kannst du auch TCollection und TCollectionItem verwenden.

Union 25. Feb 2008 16:55

Re: Problem beim schreiben einer Listenklasse
 
Ist das Problem so dringend dass Du es zweimal postest ?

hugo1990 25. Feb 2008 17:15

Re: Problem beim schreiben einer Listenklasse
 
Zitat:

Zitat von Union
Ist das Problem so dringend dass Du es zweimal postest ?

Nein, aber der hatte sich beim hochladen irgendwie aufgehangen. und da hab ich nochmal auf absenden geklickt, weil ich es beim ersten mal noch nicht gesehen habe, aber irgendwie ist es dann doch zweimal da gewesen

PMM 26. Feb 2008 08:02

Re: Problem beim schreiben einer Listenklasse
 
Jelly:
Delphi-Quellcode:
TFile(Files[0]9.Test('bla') ;
Besser, und zumindest zur Laufzeit, typensicher ist :
Delphi-Quellcode:
(Files[0] as TFile).test('BlaBla');
PMM

jottkaerr 26. Feb 2008 08:59

Re: Problem beim schreiben einer Listenklasse
 
Wieso Typsicherheit erst zur Laufzeit und nicht schon zur Compilierzeit?

Delphi-Quellcode:
type
  TFile = class(TObject)
    // ...
  end;

  TFileList = class(TObject)
  private
    FItems: TObjectList;

    function GetItem(const Index: Integer): TFile;

  public
    constructor Create(const OwnsObjects: Boolean = True);
    destructor Destroy; override;

    function Add(const F: TFile): Integer;

    property Items[const Index: Integer]: TFile read GetItem; default;
  end;

constructor TFileList.Create(const OwnsObjects: Boolean = True);
begin
  inherited Create;

  FItems := TObjectList.Create(OwnsObjects);
end;

destructor TFileList.Destroy;
begin
  FItems.Free;

  inherited Destroy;
end;

function TFileList.Add(const F: TFile): Integer;
begin
  FItems.Add(F);
end;

function TFileList.GetItem(const Index: Integer): TFile;
begin
  Result := TFile(FItems[Index]);
end;
Dadurch dass TFileList.Add() nur Objekte vom Typ TFile akzeptiert, kann man sich den geprüften Cast in TFileList.GetItem() sparen.

jkr


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 Uhr.

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