Einzelnen Beitrag anzeigen

choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#17

Re: Interface referenzen auf gleichheit prüfen?

  Alt 13. Okt 2004, 12:48
Hallo Maximov,

wenn ich den Ursprung Deines Problems, das Verwenden einer Interfacereferenz als Schlüssel in einem Assoziativen Array (Dictionary) zu verwenden, richtig verstehe, könntest Du aus Performancegrunden die dafür gängige Variante des Bei Google suchenhashing verwenden.
Weil Du zu diesem Zweck einen Hashwert aus einem eineindeutigen Schlüssel (hier: unter Zuhilfenahme der Interfacereferenz), bilden, Du die Schlüssel letztlich vergleichen musst und in Deinem Dictionary letztlich nur solche Schlüssel zugelassen werden können, die diese Eigenschaft aufweisen, bietet sich Hagens Ansatz, ein zusätzliches Interface einzuführen, geradezu an!

Weil Schlüssel jedoch prinzipiell nicht unbedingt "gehasht" werden können müssen, könnte man die Interfaces für Dictionary und Hashtables selbst wieder voneinander erben lassen, etwa in der Art

Delphi-Quellcode:
type
  IIdentifiable = interface
    function GetIdentity: Cardinal;
    function IsSameTo(const AnIdentifiable: IIdentifiable): Boolean;
  end;
  
  IHashable = interface(IIdentifiable)
    function GetHashValue: Cardinal;
    function IsSameHashValueAs(const AHashable: IHashable): Boolean;
  end;
Ich hoffe, die ADTs
Delphi-Quellcode:
type
  TDictionary = class
     procedure Add(const AKey: IIdentifiable; const AnObject: TObject);
     procedure Remove(const AKey: IIdentifiable);
     function Has(const AKey: IIdentifiable): Boolean;
     function Get(const AKey: IIdentifiable): TObject;
     //..
  end;

  THashtable = class
     procedure Add(const AnObject: IHashable);
     procedure Remove(const AnObject: IHashable);
     function Has(const AnObject: IHashable): Boolean;
     //..
  end;
veranschaulichen, was ich meine.
gruß, choose
  Mit Zitat antworten Zitat