Delphi语言参考指南(2)Programs 和 Units

本主题介绍 Delphi 应用程序的整体结构:程序头、单元声明语法和 uses 子句( program header, unit declaration syntax, and the uses clause)。

  • 将大型程序划分为可单独编辑的模块。
  • 创建可在程序之间共享的库。
  • 将库分发给其他开发人员,而无需提供源代码。

1. program 结构和语法

一个完整的、可执行的 Delphi 应用程序由多个单元模块(unit modules)组成,所有这些模块都由称为项目文件(project file)的单个源代码模块捆绑在一起。在传统的Pascal编程中,所有源代码,包括主程序,都存储在.pas文件中。Embarcadero工具使用文件扩展名.dpr来指定主程序源模块( main program source module),而大多数其他源代码驻留在具有传统.pas扩展名的单元文件中。若要生成项目,编译器需要项目源文件,以及每个单元的源文件或已编译单元文件。

注意:严格来说,您不需要在项目中使用任何单元,但所有程序都会自动使用 System Unit 和 SysInit Unit。

可执行Delphi应用程序的源代码文件包含:

  • 程序头,
  • 一个 use 子句(可选),以及
  • 声明和可执行语句块。

编译器(以及 IDE)希望在单个项目 (.dpr) 文件中找到这三个元素。

1.1 program

program 头指定可执行程序的名称。它由保留字program组成,后跟有效标识符,后跟分号。对于使用 Embarcadero 工具开发的应用程序,标识符必须与项目源文件名匹配。

下面的示例演示名为 Editor 的程序的项目源文件。由于该程序称为Editor,因此此项目文件称为Editor.dpr。

program Editor;

  uses Forms, REAbout, // An "About" box
       REMain;         // Main form

  {$R *.res}

  begin
   Application.Title := 'Text Editor';
   Application.CreateForm(TMainForm, MainForm);
   Application.Run;
  end.

第一行包含program 头。此示例中的 uses 子句指定对三个附加单元的依赖关系:Forms、REAbout 和 REMain。$R 编译器指令将项目的资源文件链接到程序中。最后,开始和结束关键字之间的语句块在程序运行时执行。与所有 Delphi 源文件一样,项目文件以句点(不是分号)结尾。

Delphi项目文件通常很短,因为程序的大部分逻辑都驻留在其单元文件中。Delphi 项目文件通常只包含足够的代码来启动应用程序的主窗口,并启动事件处理循环。项目文件由 IDE 自动生成和维护,很少需要手动编辑它们。IDE中并不会显示dpr 文件,可以用其他文本编辑器打开查看,内容类似下面这种:

program greeting;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

在标准 Pascal 中,程序标题可以在程序名称后包含参数:

program Calc(input, output);

Embarcadero的Delphi忽略了这些参数。

在 RAD Studio 中,program 头引入了自己的命名空间,称为项目默认命名空间。

1.2 uses 子句

uses 子句列出了合并到程序中的那些units。这些units可能又有自己的uses 子句。

uses 子句由关键字 uses 组成,后跟项目文件直接依赖的逗号分隔的unit列表。

1.3 begin end程序块

begin end程序块包含程序运行时执行的简单或结构化语句。在大多数程序文件中,begin end程序块由一个复合语句组成,该复合语句括在保留字 begin 和 end 之间,其组件语句只是对项目的 Application 对象的方法调用。大多数项目都有一个全局应用程序变量,其中包含 Vcl.Forms.TApplication、Web.WebBroker.TWebApplication 或 Vcl.SvcMgr.TServiceApplication 的实例。该块还可以包含常量、类型、变量、过程和函数的声明;这些声明必须位于begin end程序块的语句部分之前。请注意,表示程序源结束的结尾必须后跟句点 (.):

begin
  .
  .
  .
end.

<p>Delphi语言参考指南(2)Programs 和 Units</p>

2. Unit结构和语法

unit 由类型types(包括类classes)、常量、变量和例程routines(函数和过程functions and procedures)组成。每个unit都在其自己的源 (.pas) 文件中定义。

单元文件以 unit heading 开头,后跟接口 interface 关键字。在接口 interface 关键字之后, uses 子句指定单元依赖项的列表。接下来是实现 implementation 部分,然后是可选的初始化 initialization和完成 finalization 部分。unit源文件的骨架如下所示:

unit Unit1;

interface

uses // List of unit dependencies goes here...
  // Interface section goes here

implementation

uses // List of unit dependencies goes here...

// Implementation of class methods, procedures, and functions goes here...

initialization

// Unit initialization code goes here...

finalization

// Unit finalization code goes here...

end.

unit 必须以保留字end结尾,后跟句点结束。

注意:unit源文件中,interface 和 implementation 中都可以使用 uses 子句

2.1 unit 头

The unit heading specifies the unit’s name. It consists of the reserved word unit, followed by a valid identifier, followed by a semicolon. For applications developed using Embarcadero tools, the identifier must match the unit file name. Thus, the unit heading:

unit 头指定unit的名称。它由保留字 unit,组成,后跟有效标识符,后跟分号。对于使用 Embarcadero 工具开发的应用程序,标识符必须与unit文件名匹配。因此, unit头:

unit MainForm;

将出现在名为 MainForm.pas 的源文件中,包含编译unit的文件将是 MainForm.dcu。unit名称在项目中必须是唯一的。即使它们的unit文件位于不同的目录中,两个同名的unit也不能在单个程序中使用。

2.2 interface部分

界面部分
unit的 interface部分从保留字 interface开始,一直持续到 implementation 部分的开头。interface部分声明可供客户端使用的常量、类型、变量、过程和函数。也就是说,对于希望使用该unit中的元素的其他units 或programs。这些实体称为公共实体 public ,因为其他unit中的代码可以访问它们,就像它们是在这些unit本身中声明的一样。

过程或函数的interface 声明仅包含该例程routine的签名。即例程的名称、参数和(函数的)返回类型。包含过程或函数的可执行代码的块位于 implementation部分。因此,interface 部分中的过程和函数声明的工作方式类似于前向声明。

类的 interface 声明必须包括所有类成员的声明:字段、属性、过程和函数。

interface 部分可以包含其自己的 uses 子句,该子句必须紧跟在关键字 interface之后。

正文完