我有多个Classes只是其中TClass类型不同,在C++中可以用模板实现type
  TClasses = class
  private
    FClasses: TList;
    FCount: Integer;
    function GetItem(Index: Integer): TClass;
    procedure SetItem(Index: Integer; Value: TClass);
  public
    constructor Create;
    destructor Destroy; override;
    procedure Add(Value: TClass);
    procedure Delete(Value: TClass);
    property Items[Index: Integer]: TClass read GetItem  write SetItem; default;
    property Count: Integer read FCount;
  end;implementation{ TClasses }procedure TClasses.Add(Value: TClass);
begin
  FClasses.Add(Value);
end;constructor TClasses.Create;
begin
  FClasses := TList.Create;
end;procedure TClasses.Delete(Value: TClass);
begin
  FClasses.Extract(Value);
end;destructor TClasses.Destroy;
begin
  FreeAndNil(FClasses);
  inherited;
end;function TClasses.GetItem(Index: Integer): TClass;
begin
  Result := TClass(FClasses.Items[Index]);
end;procedure TClasses.SetItem(Index: Integer; Value: TClass);
begin
  FClasses.Items[Index] := Value;
end;

解决方案 »

  1.   

    DELPHI中没有模块的功能,不过看你的代码,就是实现了用类来保存另一些类的列表.
    你把
    function TClasses.GetItem(Index: Integer): TClass;
    begin
      Result := TClass(FClasses.Items[Index]);
    end;procedure TClasses.SetItem(Index: Integer; Value: TClass);
    begin
      FClasses.Items[Index] := Value;
    end;
    改成
    function TClasses.GetItem(Index: Integer): Pointer;
    begin
      Result := FClasses.Items[Index];
    end;procedure TClasses.SetItem(Index: Integer; Value: Pointer);
    begin
      FClasses.Items[Index] := Value;
    end;procedure TClasses.Add(Value: Pointer);
    begin
      FClasses.Add(Value);
    end;
    也就是只保存类的指针就可以.用的时候类似下面.
    TClass(Classes.GetItem(1)).Hello;
    TClass2(Classes.GetItem(2)).HoHo;
    就可以了.
      

  2.   

    把这些类当作他们的基类来保存,存到列表TList里,要用的时候用as 运算符强制转换成子类的类型就可以了。
      

  3.   

    可以学习 C# 的做法,用接口来实现这个功能TClasses 只通过接口进行操作
      

  4.   

    leapmars(流铭) 我对接口,不是很解,请作一个详细点的说明,好吗?pankun(剑神一笑)TClass(Classes.GetItem(1)).Hello;
    TClass(Classes.GetItem(2)).HoHo;
    你的想法我也想过,必须做一个强转化,写程序的进候很不方便,容易错把TClass转化成TClass2
      

  5.   

    leapmars(流铭) 的說法不可理解, 你用個TClass ,其實已經不存在同化异類的作用了!!
    然後, 我想, 如果你能保證你保存與取出的類型一致, 用强转化 也失個辦法!!!
    因為, 你取出時, 也一定要用個對應的Class 來接收啊!