目标:
type
MyRec = record
name: string;
end;
TMyClass = class
public
name: string;
end;然后使用的时候,
var
List1,List2: TList;
Rec: MyRec;
MyClass: TMyClass;
List1 := TList.Create;
List2 := TList.Create;
Rec.name = '111';
List1.Add(@Rec);
Rec.name = '222';
List1.Add(@Rec);
MyClass.name = 'aaa';
List2.Add(@MyClass);
MyClass.name = 'bbb';
List2.Add(@MyClass); ShowMessage(List1.Items[0].Name); // error
问题
1: 如何定义动态容器,且约定里面的对象为自定义类型,比如
type MyArray = array of TMyClass; // MyRec,但是我不想要数组。
2: 是否可以进行更好的类型转换,在C++里面,类型转换太好用了,我尝试过这样的类型转换:
(LRecList.Items[iIndex] as PFeeItemRec).Name
(LRecList.Items[iIndex] as FeeItemClass).Name
都错误,提示 不支持该操作。
3x.
type
MyRec = record
name: string;
end;
TMyClass = class
public
name: string;
end;然后使用的时候,
var
List1,List2: TList;
Rec: MyRec;
MyClass: TMyClass;
List1 := TList.Create;
List2 := TList.Create;
Rec.name = '111';
List1.Add(@Rec);
Rec.name = '222';
List1.Add(@Rec);
MyClass.name = 'aaa';
List2.Add(@MyClass);
MyClass.name = 'bbb';
List2.Add(@MyClass); ShowMessage(List1.Items[0].Name); // error
问题
1: 如何定义动态容器,且约定里面的对象为自定义类型,比如
type MyArray = array of TMyClass; // MyRec,但是我不想要数组。
2: 是否可以进行更好的类型转换,在C++里面,类型转换太好用了,我尝试过这样的类型转换:
(LRecList.Items[iIndex] as PFeeItemRec).Name
(LRecList.Items[iIndex] as FeeItemClass).Name
都错误,提示 不支持该操作。
3x.
var
List1,List2:TList;
Class1,Class2,TClass:TMyClass;
Rec1,Rec2,TRec:TMyRec;
begin List1:=TList.Create;
List2:=TList.Create;
Class1:=TMyClass.Create;
Class1.Name:='xlw';
Class2:=TMyClass.Create;
Class2.Name:='xt';
Rec1.Name:='RecXWL';
Rec2.Name:='RecXT';
List1.Add(@Rec1);
List1.Add(@Rec2);
List2.Add(@Class1);
List2.Add(@Class2);
//TRec:=List1.Items[0];
showMessage(TMyRec(List1.Items[0]^).Name);
ShowMessage(TMyRec(List1.Items[1]^).Name);
ShowMessage(TMyClass(List2.Items[0]^).Name);
ShowMessage(TMyClass(List2.Items[1]^).Name);
end;
不太熟悉 type cast.