目标:
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.

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    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;
      

  2.   

    3x,. 揭帖,
     不太熟悉 type cast.