单元(unit)是组成Pascal 程序的单独的源代码模块,单元由函数和过程组成,这些函数和过程能被主程序调用。

一个标准的单元文件格式如下:

unit Unit1; //单元头

interface

uses { 单元列表 } //公有

{接口部分}        //公有

implementation

uses {单元列表}   //私有

{实现部分 }       //私有

initialization

{初始化部分}

finalization

{结束部分}

end

一个单元至少要由以下三部分组成:.

一个unit 语句,每一个单元都必须在开头有这样一条语句,以标识单元的名称,单元的名称必须和文件名相匹配。例如,如果有一个文件名为A1,则unit 语句可能是:

unit A1

interface 部分,在unit 语句后的源代码必须是interface 语句。在这条语句和implementation 语句之间是能被程序和其它单元所共享的信息。一个单元的interface 部分是声明类型、常量、变量、过程和函数的地方,这些都能被主程序和其它单元调用。这里只能有

声明,而不能有过程体和函数体。interface 语句应当只有一个单词且在一行:

Interface

Interface部分又分为多个可选部分,包括单元引用部分(uses)、类型声明部分(type)、常量声明部分(const)、变量声明部分(var)以及过程和函数声明部分(function 和 procedure)。

其程序示例如下:

unit Unit1;

interface

uses                          //单元引用部分

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;

type                          //类型声明部分

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const                          //常量声明部分

PI=3.1415926;

var                            //变量声明部分

Form1: TForm1;

X: integer;

Function Mytest(X:string):String;stdcall;external 'test_dll.dll';                //过程和函数声明部分

implementation

{$R *.dfm}

implementation 部分,它在interface 部分的后面。Implementation部分又分为两部分:一部分是声明部分,另一部分是对于在Interface部分中声明过的程序和函数的定义。

声明部分包括单元、常量、数据类型、变量、过程和函数的 声明,这与interface部分相类似,所不同的是在implementation部分声明的单元、常量、数据类型、变量、过程和函数只对本单元而言是 公用的和可见的,其他单元如果要引用该单元的话是不能访问它们的。而在implementation部分生命的过程和函数不需要遵循先声明后定义的规则, 可以直接写出过程和函数的定义。

implementation 语句只有一个单词并且在一行上:

implementation

一个单元能可选地包含其它两个部分:

initialization 部分,在单元中它放在文件结尾前,它包含了用来初始化单元的代码,它在主程序运行前运行并只运行一次。

finalization 部分,在单元中它放在initialization 和end 之间。

注意如果几个单元都有initialization/finalization 部分,则它们的执行顺序与单元在主程序的users 子句中的出现顺序一致。不要使initialization/finalization 部分的代码依赖于它们的执行顺序,因为这样的话主程序的uses 子句只要有小小的修改,就会导致程序无法通过编译。

1.uses 子句

users 子句在一个程序或单元中用来列出想要包含进来的单元。例如,如果有一个程序名为FooProg,它要用到在两个单元UnitA 和UnitB 中的函数和类型,正确的uses 声明应该这样:

Program FooProg;

uses UnitA,UnitB;

单元能有两个uses 子句,一个在interface 部分,一个在implementation 部分。这里有一个例子:

Unit FooBar

Interface

Uses BarFoo;

{在这里进行全局声明 }

implementation

uses BarFly;

{在这里进行局部声明 }

initiallization

{在这里进行单元初始化 }

finalization

{在这里进行退出操作 }

end.

2.循环单元引用

读者也许经常会碰到这样的情况,在UnitA 中调用UnitB 并在UnitB 中调用UnitA,这称为循环单元引用。循环单元引用的出现表明了程序设计有缺陷,应该在程序中避免使用循环单元引用。比较好的解决方法是把UnitA 和UnitB 共有的代码移到第三个单元中。然而,有时确实需要用到循环单元引用,这时就必须把一个uses 子句移到implementation 部分,而把另一个留在interface 部分,这样就能解决问题。

Delphi库单元结构的更多相关文章

  1. Delphi 中的结构体与结构体指针

    好多程序都给结构体变量设定了一个结构体指针 例如: PAbc = ^TAbc; TAbc = record a: string[10]; b: string[5]; c: string[1]; end ...

  2. linux mysql-workbench 创建与正式库表结构一样的表

    先在本地创建数据库 字符集选择这个 创建数据库成功 创建与正式库一样的表 step1: 连接正式库,找到要生成的表,导出创建表的sql语句 step2: 找到本地数据库,选择表,在sql执行区域复制s ...

  3. Delphi BASE64单元EncdDecd的修改

    Delphi BASE64单元EncdDecd的修改 EncdDecd.pas两个函数声明: procedure EncodeStream(Input, Output: TStream);proced ...

  4. Delphi 跨单元进入(访问)类的私有成员,protected ,private部分

    http://blog.sina.com.cn/s/blog_5f8861b60102v1nl.html Delphi 跨单元进入(访问)类的私有成员,protected ,private部分 (20 ...

  5. Git-仓库基本结构

    三 Git 仓库      1.1Git 基本概念    在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository),每个仓库可以简单理解成一个目录,这个目录里面的所有文件都通过 ...

  6. 使用C++/C qsort 标准库对结构体进行快速排序

    C++标准快速排序库qsort进行结构体快速排序 代码如下 #include <stdio.h> #include <stdlib.h> typedef struct { in ...

  7. Delphi 记录类型- 结构指针

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  8. STORM_0008_Structure-of-the-codebase_Storm的代码库的结构

    http://storm.apache.org/releases/1.0.1/Structure-of-the-codebase.html Structure of the codebase 源码分成 ...

  9. 对比库表结构,生成SQL

    网上找了一圈对比库的工具,能手工生成差别的SQL的工具没有,改造了一下网上的sql 1, 获取字段名的类型 create FUNCTION [dbo].[getColType](@tab varcha ...

  10. [sql] 同库表(结构)的备份和sql聚合&navicat使用

    同库表的备份-赋值表结构和数据SQL语句 参考 有时候我们处理某个表时,需要先备份下这个表到当前这个库,然后再执行sql. 站在sql角度,就无需在mysqldump或者诸如导出sql的方式来备份了. ...

随机推荐

  1. vue学习笔记 二、环境搭建+项目创建

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...

  2. P2895

    本题用时:01:44:20. 算法:BFS 期间固然去逛了逛淘宝买了两个东西,但毕竟还是太久了.我因为忘记判断是否出界而浪费了好多时间,后来才半天想起来,这便是用了这么长时间的原因. 之后提交代码只有 ...

  3. appium(三)使用方法

    一.appium环境搭建(先决条件) 1.安装JDk 2.安装SDK 参考文章:https://www.cnblogs.com/mrwhite2020/p/13160994.html 3.安装appn ...

  4. docker 原理之 namespace (上)

    1. namespace 资源隔离 namespace 是内核实现的一种资源隔离技术,docker 使用 namespace 实现了资源隔离. Liunx 内核提供 6 种 namespace 隔离的 ...

  5. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.17)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  6. [转帖]SQL Server高级进阶之索引碎片维护

    https://www.cnblogs.com/atomy/p/15268589.html 一.产生原因及影响 索引是数据库引擎中针对表(有时候也针对视图)建立的特别数据结构,用来帮助查找和整理数据, ...

  7. KVM命令行Clone虚拟机的快速处理

    KVM命令行Clone虚拟机的快速处理 背景 鲲鹏+银河麒麟的测试环境 想着可以使用 KVM的方式创建虚拟机 virt-manager 有个clone虚拟机的提示, 但是发现没有创建新存储卷下面的磁盘 ...

  8. [转帖]从理论到实践,异步I/O模式下NVMe SSD高性能之道

    在早期NVMe的讨论话题中,常常将之AHCI协议进行对比,在支持的最大队列深度.并发进程数以及消耗时钟周期数等方面,NVMe吊打了AHCI.最直观也最权威的就是下面这张对比图片. NVMe与AHCI协 ...

  9. [转帖]Innodb存储引擎-idb文件格式解析

    文章目录 ibd 文件格式解析 idb文件 page类型和格式(File Header & Trailer) FIL_PAGE_TYPE_FSP_HDR 格式 Extent Descripto ...

  10. [转帖]Arm发布CortexX4,功耗可降低40%

    https://www.eet-china.com/mp/a224124.html ARM 发布了新一代的移动处理器内核,包括 Cortex-X4.Cortex-A720.Cortex-A520,预计 ...