我有多个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;
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;
解决方案 »
- NND,现在抢分的人也太狠了吧?
- 关于 hostnametoip 的详细用法,声明和使用,谢谢
- VB的dll调用
- 关于EDIT[i]下标的问题
- 关于制作delphi安装程序的问题
- 四个问题
- 快受不了Begin...End了
- 关于远程数据传输的问题,用拨号上网的方式实现断点续传(用Delphi),敬请高手回答??
- 在哪里可以找到ICMP的API声明?
- 在.db数据库中,100个字段名算不算多?记录可能在2000到5000之间。请到另一帖子http://www.csdn.net/expert/Topic/127/127961.shtm上挂号分帐。
- Screen.Cursor := crHourGlass;是什么意思?
- 熟悉Oracle中CLOB类型的同志请进!
你把
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;
就可以了.
TClass(Classes.GetItem(2)).HoHo;
你的想法我也想过,必须做一个强转化,写程序的进候很不方便,容易错把TClass转化成TClass2
然後, 我想, 如果你能保證你保存與取出的類型一致, 用强转化 也失個辦法!!!
因為, 你取出時, 也一定要用個對應的Class 來接收啊!