AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadOnly auf TList

Ein Thema von Andreas H. · begonnen am 12. Mai 2006 · letzter Beitrag vom 12. Mai 2006
Antwort Antwort
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#1

ReadOnly auf TList

  Alt 12. Mai 2006, 08:17
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.

Gruß Andreas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: ReadOnly auf TList

  Alt 12. Mai 2006, 08:25
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Der_Unwissende

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

Re: ReadOnly auf TList

  Alt 12. Mai 2006, 08: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
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#4

Re: ReadOnly auf TList

  Alt 12. Mai 2006, 09:23
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?
    property FileList:TList read getFFileList; Gruß Andreas
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.890 Beiträge
 
Delphi 12 Athens
 
#5

Re: ReadOnly auf TList

  Alt 12. Mai 2006, 09:34
Zitat:
property FileList:TList read getFFileList;
Weil die Property nur der Verweis auf das Objekt ist.
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
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#6

Re: ReadOnly auf TList

  Alt 12. Mai 2006, 09:40
Ja,

gleich beim Lesen der gerade abgeschickten Nachricht wars mir auch klar.

Vielen Dank, Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz