AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Instanz einer Klasse identifizieren?!

Ein Thema von maddin4u · begonnen am 2. Feb 2006 · letzter Beitrag vom 8. Feb 2006
 
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.680 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Instanz einer Klasse identifizieren?!

  Alt 3. Feb 2006, 05:43
Das Factory-Pattern wollte ich ihm auch vorschlagen, nur das endet letztendlich mit der beschriebenen Erweiterung des patterns auch in einer globalen Variable. Wo soll die Faktory sonst die Objekte verwalten?

Hier mal ein Beispiel einer typisierten ObjectList mit Erweiterung:

Delphi-Quellcode:
  TTest = class
  private
    ID : Integer;
  public
    Text: string;
    constructor Create(_ID: integer);
  end;

  TTestObjectList = class(TObjectList)
  protected
    function GetItem(Index: Integer): TTest;
    procedure SetItem(Index: Integer; AItem: TTest);
  public
    function Add(AItem: TTest): Integer;
    function Extract(Item: TTest): TTest;
    function Remove(AItem: TTest): Integer;
    function IndexOf(AItem: TTest): Integer;
    procedure Insert(Index: Integer; AItem: TTest);
    function First: TTest;
    function Last: TTest;
    property Items[Index: Integer]: TTest read GetItem write SetItem; default;

    function GetItemById(_ID : Integer; _CreateIfNotExists : Boolean = true) : TTest;
  end;


{ TTest }

constructor TTest.Create(_ID: integer);
begin
  ID := _ID;
end;

{ TTestObjectList }

function TTestObjectList.Add(AItem: TTest): Integer;
begin Result := inherited Add(AItem); end;

function TTestObjectList.Extract(Item: TTest): TTest;
begin Result := TTest(inherited Extract(Item)); end;

function TTestObjectList.First: TTest;
begin Result := TTest(inherited First); end;

function TTestObjectList.GetItem(Index: Integer): TTest;
begin Result := TTest(inherited Items[Index]); end;

function TTestObjectList.IndexOf(AItem: TTest): Integer;
begin Result := inherited IndexOf(AItem); end;

procedure TTestObjectList.Insert(Index: Integer; AItem: TTest);
begin inherited Insert(Index, AItem); end;

function TTestObjectList.Last: TTest;
begin Result := TTest(inherited Last); end;

procedure TTestObjectList.SetItem(Index: Integer; AItem: TTest);
begin inherited Items[Index] := AItem; end;

function TTestObjectList.Remove(AItem: TTest): Integer;
begin Result := inherited Remove(AItem);end;


function TTestObjectList.GetItemById(_ID: Integer;
  _CreateIfNotExists: Boolean): TTest;
var
  i : Integer;
begin
  Result := nil;
  for i := 0 to Count-1 do
  if Items[i].ID = _ID then
  begin
    Result := Items[i];
    exit;
  end;

  if not _CreateIfNotExists then exit;

  Result := TTest.Create(_ID);
  Add(Result);
end;
Sven Harazim
--
  Mit Zitat antworten Zitat
 


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 12:19 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