Das mit dem Kapseln wäre ein Ansatz, bedeutet aber einen ziemlichen Umstellungsaufwand da alle Zugriffe ja jetzt noch zusätzlich über MyClass müssen.
Das kommt darauf an. Du könntest auch zusätzliche Zugriffsroutinen deklarieren:
Delphi-Quellcode:
type
TAuto = class
end;
THaus = class
end;
TItem<T: class> = class
private
FInstance: T;
FId: Integer;
FName: string;
public
constructor Create(AInstance: T; AId: Integer; const AName: string);
property Instance: T read FInstance;
property Id: Integer read FId;
property Name: string read FName;
end;
TObjList = class(TObjectList<TObject>)
private
FId: Integer;
FName: string;
public
function Add<T: class>(AInstance: T): Integer;
function AsItem<T:class>(Index: Integer): T;
property Id: Integer read FId write FId;
property name: string read FName write FName;
end;
constructor TItem<T>.Create(AInstance: T; AId: Integer; const AName: string);
begin
inherited Create;
FInstance := AInstance;
FId := AId;
FName := AName;
end;
function TObjList.Add<T>(AInstance: T): Integer;
begin
Result := inherited Add(TItem<T>.Create(AInstance, Id, name));
end;
function TObjList.AsItem<T>(Index: Integer): T;
begin
Result := (Items[Index] as TItem<T>).Instance;
end;
Zugriff dann in etwa so:
Delphi-Quellcode:
myList.Add<TAuto>(MyAuto);
myList.Add<THaus>(MyHaus);
myAuto := myList.AsItem<TAuto>[idx];
myHaus := myList.AsItem<THaus>[idx + 1];