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
 
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#9

Re: Instanz einer Klasse identifizieren?!

  Alt 3. Feb 2006, 09:45
Ok, statische Klassenvariablen gibt es ja eigentlich nicht in Delphi. Natürlich ist deine Variable, die du hier hochzählst wiederum global und das lässt sich (wie hier schon gesagt wurde) einfach vermeiden.

Was ich meinte noch mal als Delphi Code
Delphi-Quellcode:
type
  TFoo = class(TObject)
    private
      FId : Cardinal;
      ...
    public
      constructor create(const Id : Cardinal);
      property Id : Cardinal read FId;
  end;

constructor TFoo.Create(const Id : Cardinal);
begin
  inherited create;
  self.Id := Id;
end;
Delphi-Quellcode:
type
  TFooFactory = class(TObject)
    private
      id : Cardinal;
      InstanceList : TFooList;
    public
      constructor create;
      destructor destroy; override;
      function getFooInstance : TFoo;
  end;

constructor TFooFactory.Create;
begin
  inherited create;
  self.id := 0;
  self.InstanceList := TFooList.Create;
end;

destructor TFooFactory.Destroy;
begin
  self.InstanceList.Free; // Achtung, hier müssen natürlich auch alle gespeicherten Instanzen aut. gelöscht werden
  inherited destroy;
end;

function TFooFactory.getFooInstance : TFoo;
var buffer : TFoo;
begin
  buffer := TFoo.Create(self.id);
  inc(self.id);
  self.InstanceList.Add(buffer);
end;
Wie man sieht, kann man also sehr leicht eine Liste im Private Bereich verwalten und imho gehört sie auch genau dahin. Dies ist natürlich ein stark vereinfachtes Beispiel, aber es kann sehr leicht angepasst werden, so dass man dann die TFooList nur noch nach einem speziellen TFoo durchsucht.

Gruß Der Unwissende

[Edit]
Ach ja, wenn man die Nummern alle nur einmal vergeben möchte, übergreifend für mehr als einen möglichen Aufrufer, sollte man natürlich etwas threadsafe arbeiten. Ansonsten natürlich auch noch ein Singleton-Pattern auf die Factory anwenden, dann gibt es nur eine Instanz von dieser TFooFactory, die man bekommt und somit hat man dort auch wieder eine globale Eindeutigkeit der Ids. Allerdings kommt man beim Singleton Pattern (soviel ich weiß) nicht mehr um eine globale Variable herum.
[/Edit]
  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 02:03 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