类声明部分:

TDMSTrains = class(TList)
private
FHashed: Boolean;
FHashList: TFpHashList;
FOwnsObjects: Boolean;
FSorted: Boolean;
FUpdateLevel: Integer;
protected
function GetItem(Index: Integer): TDMSTrain;
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
procedure SetItem(Index: Integer; AObject: TDMSTrain);
public
constructor Create; overload;
constructor Create(AOwnsObjects: Boolean;Hashed:Boolean;AutoSorted:boolean);
overload;
destructor Destroy; override;
function Add(AObject: TDMSTrain): Integer;
procedure BeginUpdate;
procedure EndUpdate;
function Extract(Item: TDMSTrain): TDMSTrain;
function Find(const ATrainId:string): TDMSTrain;
function First: TDMSTrain;
function IndexOf(AObject: TDMSTrain): Integer;
procedure Insert(Index: Integer; AObject: TDMSTrain);
function Last: TDMSTrain;
function Remove(AObject: TDMSTrain): Integer;
property Items[Index: Integer]: TDMSTrain read GetItem write SetItem;
default;
property OwnsObjects: Boolean read FOwnsObjects write FOwnsObjects;
property UpdateLevel: Integer read FUpdateLevel;
end;

实现部分:

{
********************************** TDMSTrains **********************************
}
constructor TDMSTrains.Create;
begin
inherited Create;
FOwnsObjects := True;
FHashList:=TFpHashList.Create;
FHashed:=True;
FSorted:=True;
end;

constructor TDMSTrains.Create(AOwnsObjects: Boolean;Hashed:Boolean;
AutoSorted:boolean);
begin
inherited Create;
FHashList:=TFpHashList.Create;
FOwnsObjects := AOwnsObjects;
FHashed:=Hashed;
FSorted:=AutoSorted;
end;

destructor TDMSTrains.Destroy;
begin
inherited;
FHashList.Free;
end;

function TDMSTrains.Add(AObject: TDMSTrain): Integer;
begin
Result := inherited Add(AObject);
end;

procedure TDMSTrains.BeginUpdate;
begin
Inc(FUpdateLevel);
end;

procedure TDMSTrains.EndUpdate;
begin
if FUpdateLevel>0 then
Dec(FUpdateLevel);
if (FUpdateLevel=0) and FSorted then
Sort(SortTrainBy_PSTLJ_TRAINTYPE_ASC);
end;

function TDMSTrains.Extract(Item: TDMSTrain): TDMSTrain;
begin
Result := TDMSTrain(inherited Extract(Item));
end;

function TDMSTrains.Find(const ATrainId:string): TDMSTrain;
begin
Result:=TDMSTrain(FHashList.Find(ATrainid));
end;

function TDMSTrains.First: TDMSTrain;
begin
Result := TDMSTrain(inherited First);
end;

function TDMSTrains.GetItem(Index: Integer): TDMSTrain;
begin
Result := inherited Items[Index];
end;

function TDMSTrains.IndexOf(AObject: TDMSTrain): Integer;
begin
Result := inherited IndexOf(AObject);
end;

procedure TDMSTrains.Insert(Index: Integer; AObject: TDMSTrain);
begin
inherited Insert(Index, AObject);
end;

function TDMSTrains.Last: TDMSTrain;
begin
Result := TDMSTrain(inherited Last);
end;

procedure TDMSTrains.Notify(Ptr: Pointer; Action: TListNotification);
var
T: Integer;
begin
if FHashed then
begin
if (Action=lnDeleted)then
begin
T:=FHashList.FindIndexOf(TDMSTrain(Ptr).name);
if T<>-1 then
FHashList.Delete(T);
if OwnsObjects then
TDMSTrain(Ptr).Free;
end else if (Action=lnAdded) then
begin
FHashList.Add(TDMSTrain(Ptr).name,Ptr);
if (FUpdateLevel=0) and FSorted then
Sort(SortTrainBy_PSTLJ_TRAINTYPE_ASC);
end;
end;
inherited Notify(Ptr, Action);
end;

function TDMSTrains.Remove(AObject: TDMSTrain): Integer;
begin
Result := inherited Remove(AObject);
end;

procedure TDMSTrains.SetItem(Index: Integer; AObject: TDMSTrain);
begin
inherited Items[Index] := AObject;
end;

一个继承TList的例子的更多相关文章

  1. 关于Java中的继承和组合的一个错误使用的例子

    [TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...

  2. 一个简单的CORBA例子

    因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...

  3. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  4. pytion3--class一个更实际的例子

    class一个更实际的例子 到目前为止,我们所看的大多数例子都是人为创造而且是独立完备的,其目的是为了帮助你把注意力集中在基础知识上.然而,本章的结尾是一个较大的例子,把我们所学的大多数概念都聚合在这 ...

  5. java 多线程——一个定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  6. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子

    这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下   我们先来实现一个简单的例子,hello world ...

  7. 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...

  8. 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...

  9. 一个简单的cmake例子

    一个简单的cmake例子CMakeLists.txt,生成动态库文件,可以指定发布目录. 尚不支持: 1.交叉编译环境配置 2.添加依赖库   #在当前目录新建一个build目录,然后cd build ...

随机推荐

  1. python中的if __name__ == '__main__' what hell is it?

    python中的if __name__ == '__main__' what hell is it? python认为一切模块都可能被执行或者被import 如果一个模块是被import导入的,那么该 ...

  2. SpringMVC——form标签的使用

    ----------------------------------------------------------------------------------- <%@page impor ...

  3. 初识WebSocket协议

    1.什么是WebSocket协议 RFC6455文档的表述如下: The WebSocket Protocol enables two-way communication between a clie ...

  4. Bootstrap 3 管理模板

    下面这 10 个模板是从最新的 Bootstrap 3 管理模板人工挑选出来的,用来构建网站的后台管理界面,这些模板都是在最近 2 个月内发布. 1. Curo – Admin Template Cu ...

  5. arcgis 10.1 错误(TCP_NODELAY NOT enabled)

    Procedure The steps provided require that you briefly stop the license manager. During this time, co ...

  6. Java的委托

    http://www.cnblogs.com/soojoe/archive/2012/04/12/2532304.html 委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一 ...

  7. Oracle存储过程 输出参数赋值异常:“Oracle.DataAccess.Types.OracleString”的类型初始值设定项引发异常。

    场景: 写了一个有返回参数的存储过程,在个另开发人员机器上都正常.其它机器报如题错误.让人郁闷的是,所有调用方都是客户端,根本不存在网上众贴所说的版本不一致问题. 分析: 虽然网上的帖子没有根本解决问 ...

  8. 在Label中显示一段文字

    Let’s create a new Xamarin.Forms PCL solution, named Greetings, using the same process described abo ...

  9. Tomcat - SSL操作大全

    简介 制作CSR申请文件 安装证书文件 客户证书认证 证书的备份(导出) 证书的恢复(导入)   简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,目前最新版本是6.0.20(截止 ...

  10. .netGDI+(转)

    架上图片了你就可以在画板上涂改了啊我要写多几个字上去 string str = "Baidu"; //写什么字? Font font = Font("宋体",3 ...