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