huhu
ich hab ein object das mehrere objecte in einer TList verwaltet. das funktioniert soweit super. jetzt hab ich aber festgestellt das es programmtechnisch sinnvoll wäre wenn jedes object in der liste den eigenen index weiss, also die position an der das object in der TList liegt.
vom prinzip her hab ich das bisher so gelöst, das die procedure die ein neues object in der liste hinzufügt auch gleich den neuen index dem neuen object übergibt. da ich versuche das ganze so "sauber" wie möglich zu schreiben bin ich auf ein kleines problem gestossen
die eigenschaft INDEX sollte natürlich schreibgeschütz sein, da die liste ja ein object verwaltet und damit auch den index entsprechend setzt wenn ich ein object der liste hinzufüge oder verschiebe etc.
wie deklariere ich das nun am dümmsten in meiner klasse?
bisher wollte ich das so lösen (bsp)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| TObjectA = class (TObject) private FIndex: Integer; public constructor Create(const Index: Integer = -1); destructor Destroy; override; property Index: Integer read FIndex; end;
TObjectB = class(TObject) private FItems: TList; public constructor Create; destructor Destroy; override; function AddItem: TObjectA; end;
function TObjectB.AddItem: TObjectA; var Item: TObjectA; begin Item:= TObjectA.Create; Item.FIndex:= FItems.Add(Item); Result:= Item; end; |
da sich ObjectA und ObjectB in der selben Unit befinden kann ich direkt auf FIndex von ObjectA zugreifen. von "außen" geht es nicht da ich die property entsprechend schreibgeschützt habe.
lange rede kurzer sinn: mich stört jetzt das ich von ObjectB aus direkt auf eine Varibale von ObjectA zugreife. wie kann man das "vernünftig" lösen ohne das man von "außen" drauf zugreifen kann?
oder habe ich generell einen falschen ansatzt?