最近整理了一些函数列表, 算是一个宏观的安排; 等以后再碰到一些函数时就可以放置的更有次序一些.

我对函数与类的理解是:

函数是一个功能模块, 类是一个更强大的功能模块; 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]的更多相关文章

  1. 学习 TList 类的实现[4]

    现在准备一步步地模拟 TList 类, 建立一个自己的 TMyList. 首先, 这个类中应该包括前面提到的那个 Pointer 数组(TPointerList)的指针(PPointerList): ...

  2. 学习 TList 类的实现[8]

    现在准备建立 Items 数组属性; 在 public 区输入下面代码:property Items[Index: Integer]: Pointer; 执行 Shift+Ctrl+C 后的代码是: ...

  3. 学习 TList 类的实现[2]

    我原来以为 TList 可能是一个链表, 其实只是一个数组而已. 你知道它包含着多大一个数组吗? MaxListSize 个!MaxListSize 是 Delphi 在 Classes 单元定义的一 ...

  4. 学习 TList 类的实现[6]

    实现 TMyList.Add 函数. TList 中的 Add 函数用到了一个 Grow 方法, 它的原理是元素越多就为以后准备更多内存, 我们这里省略为预留 4 个元素的内存; TList 中的 A ...

  5. 学习 TList 类的实现[5]

    先来实现 TMyList.SetCapacity. 马上会想到下面代码: procedure TMyList.SetCapacity(const Value: Integer); begin   if ...

  6. 学习 TList 类的实现[3] - 不能回避的话题: 内存分配

    在 Delphi 中, 几乎所有的类型都有对应的指针类型, 譬如: Char PChar Word PWORD Double PDouble TPoint PPoint 甚至一种类型对应这着几种指针类 ...

  7. 学习 TList 类的实现[7]

    总结目前 TMyList 已具备的功能(3 个方法.3 个属性): Add: 添加; Delete: 删除; Clear: 清空;Count: 元素总数;Capacity: 已存在的所有元素位置数;L ...

  8. Java虚拟机JVM学习07 类的卸载机制

    Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就 ...

  9. Java虚拟机JVM学习04 类的初始化

    Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...

随机推荐

  1. centos 手动编译 fcitx 各种问题大全

    yum install ncurses-devel   tinyxml-devel sqlite-devel wget http://downloads.sourceforge.net/project ...

  2. Spring 是如何解决并发访问的线程安全性问题的

    springmvc的controller是singleton的(非线程安全的),这也许就是他和struts2的区别吧!和Struts一样,Spring的Controller默认是Singleton的, ...

  3. 使用B或BL跳转时,下一条指令的地址的计算

    .text .global _start 3_start: b step1 step1: ldr pc, =step2 step2: b step2 反汇编代码: : eaffffff b 0x4 : ...

  4. 在ajax post处理文件下载

    我有一个JavaScript应用程序需要使用ajax post请求发送到某个URL,然后后端会根据请求中的参数进行相应的工作,生成一个可下载的压缩包,等待下载.必须使用的ajax的原因是这里需要模拟提 ...

  5. Python IDLE快捷键【转载合集】

    转载自:http://www.douban.com/note/212321426/ 编辑状态时:Ctrl + [ .Ctrl + ] 缩进代码Alt+3 Alt+4 注释.取消注释代码行Alt+5 A ...

  6. dvwa 源码分析(一) --- setup.php分析

    我们分析的第一个文件是setup.php,也是程序的安装文件. <?php define( 'DVWA_WEB_PAGE_TO_ROOT', '' ); require_once DVWA_WE ...

  7. linux搭建git服务器

    服务端配置 1.安装git 2.新建一个用户,只能用来上传代码,而不能通过ssh登录,比如git用户 adduser git chsh -s $(command -v git-shell) git 使 ...

  8. ASPxGridView常用总结

    目录:一.客户端常用1.常用API2.聚焦行变更事件3.客户端选择多行4.客户端选择行5. 获取选择的行数目6.单击行时,选中行7.通过checkbox 选择行8.选择所有行9.启动编辑框,Conta ...

  9. dom4j解析带命名空间的xml文件

    文件内容如下 <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=& ...

  10. contiki ipv6测试问题

    I'm using simple_udp_sendto to communicate between nodes. A border router was initialized with a pre ...