Thema: Delphi ReadOnly auf TList

Einzelnen Beitrag anzeigen

Der_Unwissende

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

Re: ReadOnly auf TList

  Alt 12. Mai 2006, 07:38
Hi,
du kannst einfach eine Eigenschaft Items in deiner Ableitung einführen, mit dieser gleichen Bennenung verdeckst du das alte Property und kannst auch nur lesend (nach aussen) den Zugriff ermöglichen.
Schöner ist denke ich dennoch der Weg, den SirThornberry anspricht, einfach einen Wrapper rumsetzen. Der kann dann (ohne Rücksicht auf den Namen der Eigenschaft) für deine Klasse den Schreibzugriff auf nicht öffentlich setzen

Delphi-Quellcode:
type
  // Möglichkeit 1
  // verdecken der Eigenschaft
  TExtList = class(TList)
    protected
      function getItem(i : Integer) : Pointer;
      procedure setItem(i : Integer; Item : Pointer);
    public
      property Items[i : Integer] : Pointer read getItem;
  end;
Delphi-Quellcode:
type
  // Möglichkeit 2
  // erstellen einer Wrapperklasse
  TListWrapper = class(TObject)
    private
      FList : TList;
    protected
      function getItem(i : Integer) : Pointer;
      procedure setItem(i : Integer; Item : Pointer);
    public
      property Items[i : Integer] : Pointer read getItem;
  end;
Sehen sich im Prinzip mal recht ähnlich, der wichtigste Unterschied liegt auch eher in den nicht implementierten Methoden. Während du in der ersten Version direkt auf die eigenen Daten zugreifst, musst du in der zweiten Variante immer auf die private Instanz FList zugreifen.
Der Vorteil an Letzterem ist, dass du gar nicht erst versuchst etwas zu verdecken. Dies würde spätestens dann ein Problem werden, wenn die TList plötzlich mal Targets statt Items (mir fällt gerade keine gute Umbenennung ein) als Eigenschaft besitzt.

Gruß Der Unwissende
  Mit Zitat antworten Zitat