学习 TList 类的实现[1]
我对函数与类的理解是:
函数是一个功能模块, 类是一个更强大的功能模块; Delphi 已经提供了很多的函数与类, 但很多时候我们却视而不见, 重新"刀耕火种".
曾记得网上有一个 Delphi 行家连续几年开发与升级一个"通配符"相关的函数, 终于有一天他说: 原来 Delphi 有这个函数.
也见过有人大骂 Delphi 连哈希表都没有, 其实只有他不知道而已.
我自己也傻呵呵地实现过 StringOfChar 类似功能的事情, 在这个帖子中:
http://www.cnblogs.com/del/archive/2008/03/12/1101970.html
早就想认真学习几个 Delphi 的类, 看看它的实现过程和实现思路, 以尽早让自己的程序走入正途; 之所以选中 TList 作为开始, 不仅仅是因为它简单、常用, 更主要的原因是: 它是直接由 TObject 派生的.
定义一个继承于 TObject 的类, 有以下三种写法:
TMyList = class(TObject)
end; TMyList = class
end; TMyList = class(TObject);
如果只是在本单元使用, 可以定义在 implementation 区; 但一般要放在 interface 区, 以让其他单元都能使用.
就像定义变量需要冠以 Var、常量需要冠以 Const 一样, 定义一个新的类型需要冠以 Type.
区内所有类型可以共用一个 Type, 若不嫌罗嗦, 每种类型分别冠以 Type 也无不可.
下面的例子中的 TMyList 类就定义在 interface 区 TForm1 类的后面, 因为它们没有依存关系, 前后无所谓.
尽管我们没有给这个类添加任何功能, 因为它继承于 TObject, 并且 TObject 没有 private 区, 所以现在 TMyList 已拥有 TObject 同样的功能(但 Delphi 认为, 它们已经不是一个类型了).
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end; {自定义的 TMyList 类}
TMyList = class(TObject) end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);
var
myList: TMyList; {声明一个 TMyList 类的变量}
begin
myList := TMyList.Create;
ShowMessage(myList.ClassName); {TMyList}
myList.Free;
end; end.
学习 TList 类的实现[1]的更多相关文章
- 学习 TList 类的实现[4]
现在准备一步步地模拟 TList 类, 建立一个自己的 TMyList. 首先, 这个类中应该包括前面提到的那个 Pointer 数组(TPointerList)的指针(PPointerList): ...
- 学习 TList 类的实现[8]
现在准备建立 Items 数组属性; 在 public 区输入下面代码:property Items[Index: Integer]: Pointer; 执行 Shift+Ctrl+C 后的代码是: ...
- 学习 TList 类的实现[2]
我原来以为 TList 可能是一个链表, 其实只是一个数组而已. 你知道它包含着多大一个数组吗? MaxListSize 个!MaxListSize 是 Delphi 在 Classes 单元定义的一 ...
- 学习 TList 类的实现[6]
实现 TMyList.Add 函数. TList 中的 Add 函数用到了一个 Grow 方法, 它的原理是元素越多就为以后准备更多内存, 我们这里省略为预留 4 个元素的内存; TList 中的 A ...
- 学习 TList 类的实现[5]
先来实现 TMyList.SetCapacity. 马上会想到下面代码: procedure TMyList.SetCapacity(const Value: Integer); begin if ...
- 学习 TList 类的实现[3] - 不能回避的话题: 内存分配
在 Delphi 中, 几乎所有的类型都有对应的指针类型, 譬如: Char PChar Word PWORD Double PDouble TPoint PPoint 甚至一种类型对应这着几种指针类 ...
- 学习 TList 类的实现[7]
总结目前 TMyList 已具备的功能(3 个方法.3 个属性): Add: 添加; Delete: 删除; Clear: 清空;Count: 元素总数;Capacity: 已存在的所有元素位置数;L ...
- Java虚拟机JVM学习07 类的卸载机制
Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...
- Java虚拟机JVM学习04 类的初始化
Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...
随机推荐
- centos 手动编译 fcitx 各种问题大全
yum install ncurses-devel tinyxml-devel sqlite-devel wget http://downloads.sourceforge.net/project ...
- Spring 是如何解决并发访问的线程安全性问题的
springmvc的controller是singleton的(非线程安全的),这也许就是他和struts2的区别吧!和Struts一样,Spring的Controller默认是Singleton的, ...
- 使用B或BL跳转时,下一条指令的地址的计算
.text .global _start 3_start: b step1 step1: ldr pc, =step2 step2: b step2 反汇编代码: : eaffffff b 0x4 : ...
- 在ajax post处理文件下载
我有一个JavaScript应用程序需要使用ajax post请求发送到某个URL,然后后端会根据请求中的参数进行相应的工作,生成一个可下载的压缩包,等待下载.必须使用的ajax的原因是这里需要模拟提 ...
- Python IDLE快捷键【转载合集】
转载自:http://www.douban.com/note/212321426/ 编辑状态时:Ctrl + [ .Ctrl + ] 缩进代码Alt+3 Alt+4 注释.取消注释代码行Alt+5 A ...
- dvwa 源码分析(一) --- setup.php分析
我们分析的第一个文件是setup.php,也是程序的安装文件. <?php define( 'DVWA_WEB_PAGE_TO_ROOT', '' ); require_once DVWA_WE ...
- linux搭建git服务器
服务端配置 1.安装git 2.新建一个用户,只能用来上传代码,而不能通过ssh登录,比如git用户 adduser git chsh -s $(command -v git-shell) git 使 ...
- ASPxGridView常用总结
目录:一.客户端常用1.常用API2.聚焦行变更事件3.客户端选择多行4.客户端选择行5. 获取选择的行数目6.单击行时,选中行7.通过checkbox 选择行8.选择所有行9.启动编辑框,Conta ...
- dom4j解析带命名空间的xml文件
文件内容如下 <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=& ...
- contiki ipv6测试问题
I'm using simple_udp_sendto to communicate between nodes. A border router was initialized with a pre ...