>[success]百度网盘中可下载源码
源码文件名: 附加信息TList泛型扩展.zip
```
unit uSimpleListEx;
interface
uses
System.Classes, Generics.Collections;
type
TSimpleListEx<T> = class(TList<T>)
protected
procedure FreeItem(AItem: T); virtual;
public
procedure ClearAndFreeAllItems;
destructor Destroy; override;
end;
TClassSimpleListEx<T: Class, constructor> = class(TSimpleListEx<T>)
protected
procedure FreeItem(AItem: T); override;
public
function AddNewOne: T; // 创建一个新的 Item
end;
implementation
{ TSimpleListEx<T> }
procedure TSimpleListEx<T>.ClearAndFreeAllItems;
var
Q: T;
begin
for Q in self do
begin
FreeItem(Q);
end;
Clear;
end;
destructor TSimpleListEx<T>.Destroy;
begin
ClearAndFreeAllItems;
inherited;
end;
procedure TSimpleListEx<T>.FreeItem(AItem: T);
begin
end;
{ TClassSimleListEx<T> }
function TClassSimpleListEx<T>.AddNewOne: T;
begin
Result := T.Create;
add(Result);
end;
procedure TClassSimpleListEx<T>.FreeItem(AItem: T);
begin
inherited;
AItem.free;
// 已经知道他是 TObject ,就这样释放
end;
end.
```
*****
```
unit uMyWorkList;
interface
uses
SysUtils, uSimpleListEx;
type
TMyWorkItemBase = class
public
function ToDetail: string; virtual;
public
ID: integer;
end;
TMyWorkItemOne = class(TMyWorkItemBase)
public
function ToDetail: string; override;
public
Age: integer;
Info: string;
end;
TMyWorkItemList<T: TMyWorkItemBase, constructor> = class(TClassSimpleListEx<T>)
public
function GetItemById(AId: integer): T;
end;
TMyWorkItemOneList = class(TMyWorkItemList<TMyWorkItemOne>);
implementation
{ TMyWorkItemList<T> }
function TMyWorkItemList<T>.GetItemById(AId: integer): T;
var
Q: T;
begin
Result := nil;
for Q in self do
begin
if Q.ID = AId then
begin
Result := Q;
break;
end;
end;
end;
{ TMyWorkItemBase }
function TMyWorkItemBase.ToDetail: string;
begin
Result := '-------------'#13#10'id:' + inttostr(ID);
end;
{ TMyWorkItemOne }
function TMyWorkItemOne.ToDetail: string;
var
r: string;
begin
r := inherited;
Result := r + #13#10;
Result := Result + 'age:' + inttostr(Age) + #13#10;
Result := Result + 'Info:' + Info;
end;
end.
```
- 0.1 教程说明
- 0.2 delphi xe8 安装
- 0.2.2 XE 10.3.3 安装
- 0.3 delphi IDE 的非常必要的配置
- 0.4 调试中的异常处理
- 0.5 工程路径设置
- 0.6 开发工具界面切换成中文的问题
- 一、实用技巧
- 0.尝试为event取名叫伊文特
- 1.各种(变量)数据在内存中是什么样子的?
- 2
- 3
- 4.乱码问题
- 5
- 二、多线程
- 三、DLL相关
- 1.DLL中函数参数如何设计?
- 2.调用易语言DLL识别验证码
- 四、界面设计
- 1.关于解耦问题
- 2.登录功能设计
- 五、面向对象基础知识
- 1.窗口间传递值
- 3.避免又臭又长的裹脚布
- 2.扩展 TStringGrid , delphi 7 示例
- 六、初学者误区集锦
- 七 TList 集合
- 1.附加信息Pointer设计
- 2.用 TList 来建立组件间的联系
- 3.泛型 TList<T> 示例