![]() |
ReadOnly auf TList
Hallo,
wie kann ich eigentlich in einer selbsterstellten Klasse den Zugriff auf die darin enthaltene Ableitung von TList auf lesenden Zugriff beschränken? Die Liste sollte nur durch die Klasse änderbar sein, externer Code soll aber lesend auf die Liste zugreifen können? Irgendwie stehe ich auf dem Schlauch. :gruebel: Gruß Andreas |
Re: ReadOnly auf TList
hast du von TList abgeleitet oder TList im private?
Wenn du TList im Private wäre es damit getan das du nur Methoden zum lesen implementierst. wie hast du es denn derzeit umgesetzt - kannst du eventuell etwas quelltext posten? |
Re: ReadOnly auf TList
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:
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.
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; 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 |
Re: ReadOnly auf TList
Hallo,
und schon stehe ich nicht mehr auf dem Schlauch. Aber irgendwie habe ich es gewusst, ich komme nicht umhin, alle Lesezugriffe zu wrappen. Ich möchte ja nicht nur den Zugriff auf Items erlauben sondern auch IndexOf, First usw. Warum geht eigenlich nicht Folgendes?
Delphi-Quellcode:
Gruß Andreas
property FileList:TList read getFFileList;
|
Re: ReadOnly auf TList
Zitat:
Diese Deklaration verhindert nur, daß Du den Verweis auf ein anderes Objekt umbiegst. Die eigentlichen Behandlungsroutinen kommen aus dem Objekt. Und in dem ist der schreibende Zugriff erlaubt. Gruß Thomas |
Re: ReadOnly auf TList
Ja,
gleich beim Lesen der gerade abgeschickten Nachricht wars mir auch klar. Vielen Dank, Andreas :balloon: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 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