Einzelnen Beitrag anzeigen

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