写完开篇之后考虑很久先写什么,Delphi是以单元(unit)作为它的程序组成,单元文件的后缀名为 .pas 想来想去还是从单元文件开始说起
我们在官方文档可以看到如下的描述
- 将大型程序划分为可以单独编辑的模块。
- 创建可以在程序之间共享的库。
- 在不提供源代码的情况下将库分发给其他开发人员。
一个完整的,可执行的Delphi应用程序由多个单元模块组成,所有这些模块都由一个称为项目文件的源代码模块捆绑在一起。项目文件的后缀名为 .dpr
官方文档:http://docwiki.embarcadero.com/RADStudio/Sydney/en/Programs_and_Units_(Delphi)
结构和语法-.dpr
手动新建一个 VCL Application 通过下图的方式可以看到程序最开始的源码
其代码如下:
program Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
可执行的Delphi应用程序的源代码文件包含:
(1)program 声明:默认情况下采用的就是当前的项目名称
(2)uses 语句声明:use子句由关键字use组成,后跟一个逗号分隔的项目文件直接依赖的单位列表
(3)可执行语句块
begin
.
.
.
end.
其组成语句只是对项目的Application对象的方法调用。 大多数项目都有一个全局Application变量,该变量包含Vcl.Forms.TApplication,Web.WebBroker.TWebApplication或Vcl.SvcMgr.TServiceApplication的实例(对象)。
该块还可以包含常量,类型,变量,过程和函数的声明; 这些声明必须在块的语句部分之前。
注意,代表程序源结尾的结尾必须后面带有英文状态句号
通过上文可以看出,Delphi程序确实是通过 .dpr 文件进行组织,其中 .pas 即为创建程序时通过项目创建向导并自动引入。将来自己手动创建的普通单元文件如果想成功的使用依然需要在此处进行引入
结构和语法-.pas
以这种后缀名结尾的文件即为普通的单元文件,这个也是使用频率最高的一种文件类型。
创建方式也很简单,可以通过IDE顶部菜单的**File-->New-->Unit **的方式创建,也可以通过下图的方式创建
一个单元由类型(包括类),常量,变量和例程(函数和过程)组成。
单元文件以 unit 开头,后跟interface关键字。 在interface关键字之后,uses子句指定了单元依赖性列表。 接下来是实现部分implementation,然后是可选的初始化initialization 和完成部分finalization 。 单元源文件如下所示:
unit Unit1;
interface
uses // 依赖清单,或者称为引入的其他单元清单,一般引入系统单元
// 声明部分
implementation
uses // 依赖清单,或者称为引入的其他单元清单。一般引入自定义单元,可避免互相引用
// 类、方法、过程和函数的实现在这里...
initialization
//初始化部分
// 程序启动时先执行,并顺序执行。一个单元的初始化代码运行之前,就运行了它使用的每一个单元的初始化部分
finalization
// 结束化部分,程序结束时执行
end.
Interface 部分
(1)接口部分声明常量、类型、变量、过程和函数,这些声明对引用单元就像自己的声明一样
(2)在接口部分声明的过程和函数,就像使用了forward关键字(一般称为前置声明)
(3)接口部分可以包含其自己的uses子句,该语句必须立即出现在关键字interface之后。
Implementation 部分
(1)如果包含uses字句,必须紧跟关键字implementation
(2)在这里实现interface中定义的过程和函数,可以任意顺序的定义和调用.
(3)可以定义单元私有的常量、类型(包括类)、变量、过程和函数,但这些对引用单元的客户是不可见的
Initialization 部分
Initialization是可选的。 它从保留字初始化开始,一直持续到finalization 的开始,如果没有 finalization 部分,则一直持续到单元结束。 Initialization 部分包含在程序启动时按照它们出现的顺序执行的语句。
在其他单元中引用的话单元的初始化部分将按照其在uses语句中出现的顺序执行。
Finalization 部分
finalization部分是可选的,并且只能在具有Initialization部分的单元中使用。 finalization部分从保留字终结开始,一直持续到单元结束。 它包含在主程序终止时执行的语句(除非使用Halt程序终止程序)。 使用finalization部分释放在Initialization部分中分配的资源。
finalization部分的执行顺序与Initialization部分相反。 例如,如果在应用程序以该顺序初始化单元A、B和C,它将以C、B和A的顺序完成它们的释放。