AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Generics in Record

Ein Thema von Björn Ole · begonnen am 2. Sep 2010 · letzter Beitrag vom 2. Sep 2010
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Generics in Record

  Alt 2. Sep 2010, 13:55
Versuch es mal mit Klassen. So scheint es zu gehen

Delphi-Quellcode:
unit GTU;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

TRecObj<T> = class
type
  //PRec = ^TRec;
  TRec = class
    ID: integer;
    Data: T;
  end;
private
  FRec: TRec;
public
  constructor Create(ID: integer; Data: T);
  destructor Destroy; reintroduce;
end;

var
  Form1: TForm1;
  myObj: TRecObj<string>;

implementation

{$R *.dfm}

constructor TRecObj<T>.Create(ID: integer; Data: T);
begin
  inherited Create;
  FRec := TRec.Create;
  FRec.ID := ID;
  FRec.Data := Data; // schmeißt AV
end;

destructor TRecObj<T>.Destroy;
begin
  FRec.Destroy;
  inherited Destroy;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    myObj := TRecObj<string>.Create(-17, 'Hallo');
    Caption := myObj.FRec.Data;
end;

end.
Markus Kinzler

Geändert von mkinzler ( 2. Sep 2010 um 14:00 Uhr)
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Generics in Record

  Alt 2. Sep 2010, 14:45
Hallo Björn,

versuche es einmal mit diesem Ansatz:
Delphi-Quellcode:
uses
  Generics.Collections;

type
  TRecord<T> = record
    ID: Integer;
    Data: T;
    constructor Init (const aID: Integer; const aData: T);
  end;

  TRecordList<T> = class (TList<TRecord<T>>)
    procedure AddItem (const aID: Integer; const aData: T);
  end;

constructor TRecord<T>.Init(const aID: Integer; const aData: T);
begin
  ID := aID;
  Data := aData;
end;

procedure TRecordList<T>.AddItem(const aID: Integer; const aData: T);
var
  R: TRecord<T>;
begin
  R.Init (aID, aData);
  Add(R);
end;

// Anwendung

var
  MyList: TRecordList<string>;
begin
  MyList := TRecordList<string>.Create;
  try
    MyList.AddItem (42, 'Hallo Welt');
    MyList.AddItem (0, 'EOF');
    ShowMessage (MyList[0].Data);
  finally
    MyList.Free;
  end;
end;
Oder habe ich etwas an deiner Problemstellung übersehen?

Falls die ID eine eindeutige Kennung des Records sein sollte, wäre vielleicht ein Blick auf TDictionary<TKey,TValue> sinnvoll.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#3

AW: Generics in Record

  Alt 2. Sep 2010, 15:41
Danke für eure Tipps.

Habe es jetzt so gelöst:
Delphi-Quellcode:
type
  TItem<T> = class
  private
    FID: integer
    FData: T;
    FNext: TItem<T>;
  public
    constructor Create(AID: integer; AData: T);
    property ID: integer read FID;
    property Data: T read FData;
    property Next: TItem<T> read FNext write FNext;
  end;

  TItemList<T> = class
  type
    TListItem = TItem<T>;
  private
    FFirst: TListItem;
    FLast: TListItem;
    {...}
Damit kann ich bequem weiterarbeiten.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz