Delphi学习笔记(一)之语法基础

2017-09-12 19:22:18来源:CSDN作者:dcl_sjtu人点击

分享

Delphi是基于Pascal发展而来的一种面向对象的编程语言,其特点在于丰富的第三方控件的支持、强大的数据库开发功能、高效的编译器,使得其成为开发Windows 窗体程序的最佳选择。

  1. Delphi程序结构

    通常一个Delphi程序的源码由一个工程文件(dpr)多个unit(pas)组成,unit又由:unit名称、interface、implementation、initialization、finalization等模块和最后的“end.”组成。

    其中interface部分可以定义常量、变量、例程、类型等(只需要声明,不需要实现),uses从句(如果有)必须紧跟interface关键字之后。interface部分定义标识符可以被其他文件通过uses引用后访问。

    implementation部分主要是实现interface部分声明的例程,也可以定义常量、变量、例程、类型等,uses从句(如果有)必须紧跟implementation关键字之后。注意在此部分定义的标识符只能在本unit内访问,无法被其他文件引用到

    initialization可选,该部分代码在程序启动时运行;有多个unit都含有该部分时,按照各个unit在工程文件uses从句中的顺序来执行。

    finalization部分只有在initialization部分存在时才可选,当程序正常退出时(非Halt退出)执行,执行顺序initialization相反。(即先引用的unit的initialization先执行,finalization后执行)。

  2. uses从句与引用

    uses从句的作用相当于java/python中的import,c/c++中的include,单元名称以逗号隔开,分号结尾。工程文件(dpr)中可以使用in来指定源文件名称和路径,默认在当前目录录中搜索。

    当多个被引用的单元中定义了同样的标识符时,编译器取最后一个;

    被引用单元必须是被用到的,若是间接使用到的则不需要引用;

    Delphi中不允许使用循环引用,即某个单元直接或者间接地引用到了自己。实在需要使用到的时候,可以在implementation部分的uses从句中引用。

  3. 标识符

    标识符用于对象,可分为系统自带的和用户自定义的。

    系统自带的包括:标准常量变量名称,标准类型名称,标准例程名称,标准文件名称,系统保留字和指令符;

    用户自定义的:老老实实用字母数字下划线,不区分大小写。

    标识符的作用域:定义在函数或者例程中的标识符为局部标识符,只能在自己的代码块中使用;

    其他的均为全局标识符(在var部分定义),根据是否在interface中定义又分为公有或者私有标识符。/

  4. 常量

    直接常量:$表示十六进制,字符和字符串用单引号包围;
    符号常量:

                    Const                        name1 = value;                        name2 = value + name1;

    类型常量:(针对常用类型,不包括数组、记录、过程、指针等)

                    Const                         name1 : type1 = value1;                         name2 : type1 = value2 +name1;          (错误)                         name3 : type2 = value1 + value2;         (错误)

    资源字符串:(作为资源文件,随时修改不需要重新编译)

                    resourcestring                                str = 'xxxxxxxxxx';                   

    数组常量:多维数组、字符串数组;(圆括号包围,逗号隔开)
    记录常量:记录与变体记录(tag);(同上)
    指针常量:指针指向的对象的值可以改变,但是不能指向另外一个对象;

                Const                    pi : ^integer = @i;
  5. 变量

    声明:Var关键字后声明,需要同时声明类型;

    初始化:直接赋值(常量或表达式),注意溢出(编译器有可能不报错而采取截断);对于全局变量,系统自动初始化为0(或 nil 或 ”),对于局部变量,若不进行初始化,系统会随机赋值,因此必须手动初始化

    共址变量:

                name1 : type1;            name2 : type2 absolute name1;顾名思义,两个(或多个)变量共用一个内存开始地址,根据其大小不同取到不同的值;(Tips:对于delphi中的shortstring,第一个byte中储存的就是字符串的长度,可以通过共址变量的方式获得,而不需要调用length函数。)
  6. 类型声明

        type            类型名称 = 类型表达式;

    当类型表达式为另一个类型名称(系统类型或用户自定义类型均可)时,两种类型完全相同(任何情况下都可以使用其中任意一个),可视为定义了一个别名;
    当类型表达式为一个结构时,定义的类型名称是唯一的,即便两个类型的表达式完全相同,它们也是不同的类型。当使用以下格式进行声明时也会有同样的效果:

        type        类型名称 = type 类型表达式;
  7. 注释

    提供三种注释方法,嵌套时需使用不同的方式 :

     //... {...} (*...*)
  8. 表达式

    with表达式:避免嵌套使用;

  9. 域与命名冲突

    关于作用域可以参考前面的局部标识符和全局标识符。注意是否在函数/过程块中、是在interface还是implementation部分,或者在记录;内部。
    嵌套块中出现命名冲突时,编译器使用的是内层的标识符;
    多个单元引用出现命名冲突时,根据uses中出现的顺序(前面的为外层,当前单元为最里层)决定,不过强烈建议加上限定符。指定来自哪一个单元。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台