Zitat von
Elvis:
Eine streng typisierte Liste durch Erben von TList ist ein Ding der Unmöglichkeit.
Es könnte sein, das ich schon etwas eingerostet bin. Aber das sollte ein streng typisierter Nachfahre von
TList sein. Sieht eigentlich ganz einfach aus.
Delphi-Quellcode:
unit Unit2;
interface
uses classes;
Type
TMyListItem =
class(TObject)
private
FName:
String;
procedure SetName(
const Value:
String);
public
property Name :
String read FName
write SetName;
end;
TMyListItems =
class(TList)
protected
function Get(
Index: Integer): TMyListItem;
procedure Put(
Index: Integer;
const Value: TMyListItem);
public
function Add : TMyListItem;
procedure Clear;
override;
function Extract(Item: TMyListItem): TMyListItem;
function First: TMyListItem;
function IndexOf(Item: TMyListItem): Integer;
procedure Insert(
Index: Integer; Item: TMyListItem);
function Last: TMyListItem;
property Items[
Index: Integer]: TMyListItem
read Get
write Put;
default;
end;
implementation
{ TMyListItem }
procedure TMyListItem.SetName(
const Value:
String);
begin
FName:=Value;
end;
{ TMyListItems }
function TMyListItems.Add: TMyListItem;
begin
Result:=TMyListItem.Create;
inherited Add(Result);
end;
procedure TMyListItems.Clear;
var
iCnt : Integer;
begin
For iCnt := 0
to Count - 1
do
TObject(Items[iCnt]).Free;
inherited Clear;
end;
function TMyListItems.Extract(Item: TMyListItem): TMyListItem;
begin
Result:=TMyListItem(
inherited Extract(Item));
end;
function TMyListItems.First: TMyListItem;
begin
Result:=TMyListItem(
inherited First);
end;
function TMyListItems.Get(
Index: Integer): TMyListItem;
begin
Result:=TMyListItem(
inherited Get(
Index));
end;
function TMyListItems.IndexOf(Item: TMyListItem): Integer;
begin
Result:=inherited IndexOf(Item);
end;
procedure TMyListItems.Insert(
Index: Integer; Item: TMyListItem);
begin
inherited Insert(
Index,Item);
end;
function TMyListItems.Last: TMyListItem;
begin
Result:=TMyListItem(
inherited Last);
end;
procedure TMyListItems.Put(
Index: Integer;
const Value: TMyListItem);
begin
inherited Put(
Index,Value);
end;
end.