Delphi_02_Delphi程序的结构
一、工程文件
program MultiUnit;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1 in 'Unit1.pas';
begin
//引用unit1中的变量,因为是在接口部分定义所以可以引用
strGreet:='Hello world';
//调用unit1中的过程 因为是在接口部分定义所以可以引用
Greeting(strGreet);
//调用unit2中的函数;因为是在接口部分定义所以可以引用
nAdd:=;
nAddfactor:=;
writeln(GetSum(nadd,naddfactor));
{
1、因为pai变量是在unit1单元的实现部分定义的,因此不能被工程文件引用
}
//writeln(10*10*pai);
{
1、 因function GetArea(var r:single):single; 是在unit1单元的实现部分定义的
所以在工程文件中也不能访问
}
//writeln(GetArea(3.0));
{
1、 因为没有在工程文件中引用unit2单元,所以不能引用unit2单元的对象
2、 虽然在unit1单元引用了unit2单元,但是是在实现部分,所以在工程文件中
也不能引用unit2单元的对象。
3、 如果在unit1单元的接口部分引用了unit2单元,则在工程文件中也能引用unit2
单元文件的对象
}
//showUnit2();
readln;
end.
二、单元文件 unit1
{ 单元文件
1、Delphi程序由称为单元的源代码模块构成
2、每个单元保存在一个单独的单元文件 *.pas 文件中,分别进行编译,然后编译后的
单元被链接到程序中
3、单元文件由以下几部分组成:
单元头 unit 关键字表示
接口部分 interface 关键字表示
实现部分 implementation 关键字表示
初始化部分 initialization 关键字表示
结束化部分 finalization
单元的结尾 end. 表示
}
{ 单元头
1、 unit关键字定义单元头,
2、 语法格式为: unit 单元标识符
3、 在其他单元中利用 单元标识符 来表示整个单元
}
unit Unit1;
{ 接口部分
1、 接口部分定义其他单元引用本单元时可以访问本单元那些对象,
接口部分声明的变量、函数、过程的作用域 类似于C语言的全局对象
2、 接口部分由关键字 interface 开始,直到遇到关键字 implementation 结束
3、 接口部分可以
A、使用 uses 子句, uses子句必须紧跟在interface之后
B、利用 var 关键字定义变量
C、声明可以被其他单元调用的过程 procedure 和 函数 function
}
interface
var
strGreet:string;
nAdd:integer;
nAddFactor:integer;
{ 过程
1、 通过关键字 procedure 定义和声明过程
2、 注意声明最后有一个分号
3、 以后具体介绍
}
procedure Greeting(var strGreet:string);
{ 函数
1、 通过关键字 function 定义和声明过程
2、 注意声明最后有一个分号
3、 以后具体介绍
}
function GetSum(var value1,value2:integer):integer;
{ 实现部分
1、 实现部分用来实现单元的代码部分,实现部分主要的代码编辑部分
2、 实现部分用来定义接口部分声明的过程、函数
3、 实现部分利用关键字 implementation 表示开始,直到遇到关键字 initialization
或者 end. 为止
4、 实现部分可以使用
A、uses 子句, 如果使用uses子句,则必须紧跟implementation关键字
B、var 语句定义变量
C、定义在接口部分声明的过程、函数
D、定义只在本单元才能调用的过程、函数
}
implementation
uses
unit2;
var
pai:single=3.1415926;
{ 过程
1、 定义过程的时候必须与在接口部分完全一样,如果声明用来 var 关键字,则在
定义的时候必须用 var 关键字
}
procedure Greeting(var strGreet:string) ;
begin
writeln(strGreet);
end;
{ 函数
1、函数通过函数名返回函数值
}
function GetSum(var value1,value2:integer):integer;
begin
GetSum:=value1 + value2;
end;
function GetArea(var r:single):single;
begin
GetArea := pai * r * r;
end;
procedure showUnit2();
begin
{
1、引用了unit2单元,所以可以引用unit2单元的对象
}
writeln(unit2Var);
end;
end.
三、单元文件 unit2
unit Unit2; interface
var
unit2Var:integer=;
implementation end.
欢迎转载,转载请注明来源。
Delphi_02_Delphi程序的结构的更多相关文章
- ELF Format 笔记(十一)—— 程序头结构
ilocker:关注 Android 安全(新手) QQ: 2597294287 程序头表 (program header table) 是一个结构体数组,数组中的每个结构体元素是一个程序头 (pro ...
- 黑马程序员——JAVA基础之程序控制流结构之判断结构,选择结构
------- android培训.java培训.期待与您交流! ---------- 程序控制流结构:顺序结构:判断结构:选择结构:循环结构. 判断结构:条件表达式无论写成什么样子,只看最终的结构是 ...
- Delphi XE5教程5:程序的结构和语法
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...
- 【Xamarin挖墙脚系列:Xamarin.IOS的程序的结构】
原文:[Xamarin挖墙脚系列:Xamarin.IOS的程序的结构] 开始熟悉Xamarin在开发IOS的结构!!!!!!! 先看官方 这个是以一个单页面的程序进行讲述的. 1 程序引用的程序集,核 ...
- 【Xamarin挖墙脚系列:典型的业务程序的结构搭建】
原文:[Xamarin挖墙脚系列:典型的业务程序的结构搭建] 其实app就是客户端.在现代的程序中,都是典型的C/S结构.当然,一些离线的小游戏,功能性应用除外,如:电话本,通信录,短信查看等等 这个 ...
- 微信小程序开发01 --- 微信小程序项目结构介绍
一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...
- 毕业设计预习:VHDL入门知识学习(一) VHDL程序基本结构
VHDL入门知识学习(一) VHDL程序基本结构 简介 VHDL程序基本结构 简介 概念: HDL-Hardware Description Language-硬件描述语言-描述硬件电路的功能.信号连 ...
- Java程序的结构和执行
目录 Java程序的结构 Java程序的执行 source code -- compiler -- class file -- JVM compiler JVM Java语法 数据类型 数据的存储 堆 ...
- Android应用程序项目结构
Android应用程序项目结构 [src]:JAVA源代码目录 [gen]:由系统自动生成的JAVA源码文件,不可修改,只可查看和使用 加载的和依赖的类库 [assets]:本地存储文件的一个文件夹 ...
随机推荐
- C++标准库实现WAV文件读写
在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依赖于其他的库. WAV文件结构 ...
- 微信开发 :WeixinPayInfoCollection尚未注册Mch 问题解决
在使用开源项目 SENPARC.WEIXIN SDK 调用微信支付接口的时候出现了WeixinPayInfoCollection尚未注册Mch,这个问题. 最后地解决方案是: 我这个傻逼忘了在全局Gl ...
- 内存映射文件MemoryMappedFile使用
参考资料: http://blog.csdn.net/bitfan/article/details/4438458 所谓内存映射文件,其实就是在内存中开辟出一块存放数据的专用区域,这区域往往与硬盘上特 ...
- 信息安全-1:python之playfair密码算法详解[原创]
转发注明出处: http://www.cnblogs.com/0zcl/p/6105825.html 一.基本概念 古典密码是基于字符替换的密码.加密技术有:Caesar(恺撒)密码.Vigenere ...
- mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法! 修改mysql5.7的配置文件即可解决,方法如下: linux版:找到mysql的安装路径进入默认的为/usr/shar ...
- ASP.NET 5 Beta 7 版本
在 VS2015 发布的同时,微软也发布了 ASP.NET 5 的路线图(详见ASP.NET 5 Schedule and Roadmap : https://github.com/aspnet/ho ...
- iOS开发系列--Swift 3.0
概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...
- Spark笔记:RDD基本操作(下)
上一篇里我提到可以把RDD当作一个数组,这样我们在学习spark的API时候很多问题就能很好理解了.上篇文章里的API也都是基于RDD是数组的数据模型而进行操作的. Spark是一个计算框架,是对ma ...
- 分享一个与ABP配套使用的代码生成器源码
点这里进入ABP系列文章总目录 分享一个与ABP配套使用的代码生成器源码 真对不起关注我博客的朋友, 因最近工作很忙, 很久没有更新博客了.以前答应把自用的代码生成器源码共享出来, 也一直没有时间整理 ...
- 计数排序(counting-sort)——算法导论(9)
1. 比较排序算法的下界 (1) 比较排序 到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界:快速排序在平均情况下达到该上界. ...