Delphi面向对象的编程方法(七)

Delphi面向对象的编程方法(七),第1张

程序库单元的初始化部分 

        初始化当前库单元所使用的数据 或是通过interface部分将数据提供给其他应用程序 库单元使用时 您可以在库单元中加入一个initialization部分 在库单元的end前加上您的初始化语句 当一个应用程序使用一个库单元时 在库单元中的initialization部分会先于其他的代码执行 如果一个应用程序使用了多个库单元 则每一个库单元的初始化部分都会在所有的程序代码前执行  

使用Delphi的可视化部件及其库单元 

       当您在窗体中加入可视化部件时 如果该部件在可视化部件库中 Delphi会在您的库单元的interface部分的uses子句中自动加上需要使用的库单元名称 但有些对象在Delphi的环境中并没有可视化部件存在 例如 您想在库单元中加入一个预定义的信息框 则您必须把MsgDlg库单元加入您的uses子句中 如果您要使用TPrinter对象的话 必须将Printer库单元加入uses子句中 在在线帮助中可以查到对象所属的预定义库单元

       要使用在其他库单元中说明的函数 应在函数的前面加上这一库单元的名称 并用 号隔开 例如 要在Unit 中使用Unit 中说明的Calculate函数 应使用下面的方法

Number := Unit Calculate( )

       您可以在任何标识符如属性 常量 变量 数据类型 函数等之前加上库单元的名称 您可以在自由地在任何Delphi库单元中加入程序代码 但不要改变由Delphi生成的程序  

建立与窗体无关的新库单元 

       如果您想在工程中建立一个和任何窗体无关的新库单元 可以现选用File|New Unit 这时一个新的库单元加入了工程 新库单元的代码如下  

unit Unit interfaceimplementationend  

       Delphi将根据您的工程中的文件数目为您的库单元选择名称 您可以在程序骨架间加入您的程序代码

       当编译您的工程时 这个新加入的库单元会被编译为一个具有 DCU后缀的文件 这个新生成的文件是链接到工程的可执行文件上的机器代码 将库单元加入工程 

       将库单元加入工程是比较简单的 无论是您自己建立的库单元还是Delphi建立的与窗体有关的库单元 如果已经完成 则先打开您想加入库单元的工程(可以用Open Project打开工程) 再选用File|Open File 然后选择您想加入的源程序( PAS文件) 并选择OK即可 则库单元被加入到应用程序中  

用Delphi的对象进行编程 

       Delphi是基于面向对象编程的先进开发环境 面向对象的程序设计(OOP)是结构化语言的自然延伸 OOP的先进编程方法 会产生一个清晰而又容易扩展及维护的程序 一旦您为您的程序建立了一个对象 您和其他的程序员可以在其他的程序中使用这个对象 完全不必重新编制繁复的代码 对象的重复使用可以大大地节省开发时间 切实地提高您和其他人的工作效率  

什么是对象 

        一个对象是一个数据类型 对象就象记录一样 是一种数据结构 按最简单的理解 我们可以将对象理解成一个记录 但实际上 对象是一种定义不确切的术语 它常用来定义抽象的事务 是构成应用程序的项目 其内涵远比记录要丰富 在本书中 对象可被理解为可视化部件如按钮 标签 表等

        了解对象 最关键的是掌握对象的特性 一个对象 其最突出的特征有三个 封装性 继承性 多态性  

对象的封装性 

        对对象最基本的理解是把数据和代码组合在同一个结构中 这就是对象的封装特性 将对象的数据域封闭在对象的内部 使得外部程序必需而且只能使用正确的方法才能对要读写的数据域进行访问 封装性意味着数据和代码一起出现在同一结构中 如果需要的话 可以在数据周围砌上 围墙 只有用对象类的方法才能在 围墙 上打开缺口  

对象的继承性 

        继承性的含义直接而且显然 它是指把一个新的对象定义成为已存在对象的后代 新对象继承了旧类的一切东西 在往新对象中添加任何新内容以前 父类的每一个字段和方法都已存在于子类中 父类是创建子类的基石  

对象的多态性 

        多态性是在对象体系中把设想和实现分开的手段 如果说继承性是系统的布局手段 多态性就是其功能实现的方法 多态性意味着某种概括的动作可以由特定的方式来实现 这取决于执行该动作的对象 多态性允许以类似的方式处理类体系中类似的对象 根据特定的任务 一个应用程序被分解成许多对象 多态性把高级设计处理的设想如新对象的创建 对象在屏幕上的重显 程序运行的其它抽象描述等 留给知道该如何完美的处理它们的对象去实现  

通过Delphi实例了解对象 

      让我们结合Delphi的实例讨论对象的概念:

      当您要建立一个新工程时 Delphi 将显示一个窗体作为设计的基础 在程序编辑器中 Delphi将这个窗体说明为一个新的对象类型 并同时在与窗体相关联的库单元中生成了创建这个新窗体对象的程序代码  

unit Unit  interface uses SysUtils Windows Messages Classes Graphics Controls Forms Dialogs typeTForm = class(TForm) {窗体的类型说明开始}private{ Private declarations }public{ Public declarations }end{窗体的类型说明结束} varForm : TForm {说明一个窗体变量} implementation {$R * DFM}  end  

       新的窗体类型是TForm 它是从TForm继承下来的一个对象 它具有对象的特征 含有域或方法 由于您未给窗体加入任何部件 所以它只有从TForm类中继承的域和方法 在窗体对象的类型说明中 您是看不到任何域 方法的说明的 Form 称为TForm 类型的实例(instance) 您可以说明多个对象类型的实例 例如在多文档界面(MDI)中管理多个子窗口时就要进行这样的说明 每一个实例都有自己的说明 但所有的实例却共用相同的代码

       假设您向窗体中加入了一个按钮部件 并对这个按钮建立了一个OnClick事件处理过程 再查看Unit 的源程序 会发现TForm 的类型说明部分如下

typeTForm = class(TForm)Button : TButtonprocedure Button Click(Sender: TObject)private{ Private declarations }public{ Public declarations }end 

      现在TForm 对象有了一个名为Button 的域 它是您在窗体中加入的按钮 TButton是一个对象类型 Button 是Tbutton的一个实例 它被TForm 对象所包含 作为它的数据域 每当您在窗体中加入一个部件时 部件的名称就会作为TFom 的域加入到类型说明中来 在Delphi中 您所编写的事件处理过程都是窗体对象的方法 每当您建立一个事件处理过程 就会在窗体的对象类型中说明一个方法

       当您使用Object Inspector来改变对象(部件)的名称时 这个名称的改变会反映到程序中 例如 在Object Inspector中将Form 的Name属性命名为ColorBox 您会发现在类型说明部分 会将前文的TForm 改为  

TColorBox=class(TForm) 

       并且在变量说明部分 会说明ColorBox为TColorBox类型的变量 由Delphi自动产生的事件处理过程名称会自动改为TColorBox Button Click 但您自行编写的实现部分的代码却不会被自动修改 因此 如果您在改变Name属性前编写了程序 则您必须将事件处理过程中的对象名称进行改变 所以 原先的Form Color要改为ColorBox Color  

从一个对象中继承数据和方法 

前面的TForm 类型是很简单的 因为它只含有域Button 和方法Button Click 但是在这个窗体上 您可以改变窗体的大小 加入或删除窗体的最大最小化按钮 或设置这个窗体为MDI界面 对于一个只包含一个域和方法的对象来讲 您并没有看到显式的支持程序 在窗体上单击鼠标或用Object Inspector的上端的Object Selector选中Form 对象 按动F 查阅它的在线帮助 您会在Properties和Method中找到它的继承到的全部属性和方法 这些是在TForm类型中说明的 TForm 是TForm的子类 直接继承了它所有的域 方法 属性和事件 例如窗体的颜色属性Color就是在TForm中说明的 当您在工程中加入一个新窗体时 就等于加入了一个基本模型 通过不断地在窗体中加入部件 您就自行定义了一个新的窗体 要自定义任何对象 您都将从已经存在的对象中继承域和方法 建立一个该种对象的子类 例如对象TForm 就被说明为对象TForm的子类 拥有一个窗体部件的基本属性或方法 只有当您在窗体中加入了部件或编写了事件处理过程时 Form 才成为您自己的类型

       一个比较特殊的对象是从一个范围较广或较一般的对象中继承下来的 它是这个特别对象的祖先 这个对象则称为祖先的后代 一个对象只能有一个直接的祖先 但是它可以有许多后代 TForm是TForm 类型的祖先 所有的窗体对象都是TForm的后代

       用F 查阅窗体的在线帮助时 您会发现TForm被称为ponent(部件) 这是因为所有的部件都是对象

       在这个结构中所有的部件都是对象 部件类型TComponent从TObject类型中继承数据和程序代码 并具有额外的可以用作特殊用途的属性 方法 事件 所以部件可以直接和用户打交道 记录它的状态并存贮到文件中等等 控制类型TControl从TComponent中继承而来 又增加了新的功能 如它可以显示一个对象 在上图中 虽然TCheckBox不是直接由TObject继承来的 但是它仍然有任何对象所拥有的属性 因为在VCL结构中 TCheckBox终究还是从TObject 中继承了所有功能的特殊对象 但它还有些自行定义的独到的功能 如可以选择记录状态等  

对象的范围 

关于对象的范围 

       一个对象的范围决定了它的数据域 属性值 方法的活动范围和访问范围 在一个对象的说明部分说明的数据域 属性值 方法都只是在这个对象的范围中 而且只有这个对象和它的后代才能拥有它们 虽然这些方法的实际程序代码可能是在这个对象之外的程序库单元中 但这些方法仍然在这个对象的范围内 因为它们是在这个对象的说明部分中说明的

       当您在一个对象的事件处理过程中编写程序代码来访问这个对象的属性值 方法或域时 您不需要在这些标识符之前加上这个对象变量的名称 例如 如果您在一个新窗体上加入一个按钮和一个编辑框 并为这个按钮编写OnClick事件处理过程  

procedure TForm Button Click(Sender:Tobject)beginColor :=clFuchsiaEdit Color :=clLimeend 

       其中的第一行语句是为整个窗体Form 着色 您也可以编写如下 Form Color :=clFuchsia 

       但您可以不必加上Form 因为Button Click方法是在TForm 对象的范围里 当您在一个对象的范围中时 您可以省略所有这个对象中的属性值 方法 域之前的对象标识符 但是当您编写第二个语句改变编辑框的底色时 因为此时您想访问的是TEdit 对象的Color属性 而不是TForm 类型的 所以您需要通过在属性前面加上编辑框的名称来指明Color属性值的范围 如果不指明 Delphi会象第一个语句一样 将窗体的颜色变成绿色 因为Edit 部件是在窗体中的 它是窗体的一个数据域 所以您同样不必指明其从属关系

      如果Edit 是在其他窗体中 那么您需要在编辑框之前加上这个船体对象的名称了 例如 如果Edit 是在Form 之中 那它是Form 说明的一个数据域 并位于Form 的范围中 那么您需要将第二句改为  

Form Edit Color := clLime 

而且需要把Unit 加入Unit 的uses子句中

lishixinzhi/Article/program/Delphi/201311/24965

Delphi的编程语言是以Pascal为基础的 Pascal语言具有可读性好 编写容易的特点 这使得它很适合作为基础的开发语言 同时 使用编译器创建的应用程序只生成单个可执行文件( EXE) 正是这种结合 使得Pascal成为Delphi这种先进开发环境的编程语言

    本章中 我们将讨论Object Pascal的主要特点 并讲解如何在事件处理过程和其他应用程序中 使用它来编制程序代码 本章将讲解Delphi应用程序中最常用的Object Pascal语法 而不是Pascal语言的一切细节 如果您完全不熟悉Pascal编程 请参阅一些基础的Pascal教程 如果您具有编程经验 并能熟练地使用其他流行程序语言 您将在本章的Object Pascal中发现一些相同的概念 如果您已经熟悉了Borland Pascal 就可以快速浏览或跳过本章  

编写Object Pascal程序代码 

在本章中 我们将从熟悉Pascal编程的角度 配合实例 讲解Object Pascal编程的基本方法

在编写自己的Object Pascal程序时 要注意程序的可读性 Pascal语言是英式结构语言 在程序中选择合适的缩排 大小写风格 并在需要时将程序代码分行 会使得程序代码能够很容易地被自己和他人读懂 一般的程序员都有这样的体验 如果不给程序加上适当的注解 一段时间后 自己也难以理清程序的流程 给程序及时地加上注释是良好的编程习惯 Delphi的注释需要加注在{}之间 编辑器会把它们处理成为空白 Delphi保留了Borland Pascal编辑器的风格 关键字采用黑体字 被注释的部分会变暗 这使得编程风格良好 易读易写  

编写赋值语句 

        在事件处理过程中 最常用到的工作就是把一个新值赋给一个属性或变量 在设计用户界面时 可以使用Object Inspector(Object Inspector)来改变其属性 但有时需要在程序执行时改变属性的值 而且有些属性只能在执行时改变 这些属性在Delphi的在线帮助的 Proprety 主题中被标为执行期属性 进行这种改变 就必须使用赋值语句

       下文的赋值语句表征一个OnClick事件 当按钮按动后 将编辑框部件Edit 的Color属性置为clRed:procedure TForm Button Click(Sender: TObject)beginEdit Color := clRedend 

        当按动按钮后赋值语句被执行 编辑框变成红色

        在语句中 部件的名称在属性前 中间用 表示属性的所属关系 这样就准确地指定了要将clRed值赋给哪一部件的哪一属性 赋值号为 := 不论给属性还是给变量赋值 都是将右边的值赋给左边的属性或变量

当将一个属性值 变量 常量或文本数据赋给属性或变量时 所赋值的类型和接受此值的属性或变量的类型应相同或兼容 一个属性或变量的类型定义了此属性或变量的可能值集合 也定义了程序代码可以执行的运算 在前边的例程中 编辑框部件的Color属性和clRed的类型都是TColor 可以在在线帮助中找到一个属性的类型 另外一种方法是在Object Inspector中选定该属性值段 并按下F 键 则类型将在属性说明的结尾处列出 例如Color属性列出下边的语句  

Property Color : TColor 

有些属性是只读(Read Only)的 它们只能被读取 不能被改变 请查阅在线帮助 在Delphi中这些只读属性都有注解  

标识符的说明与使用 

标识符是Delphi应用程序中一些量的名称 这些量包括变量(var) 常量(const) 类型(type) 过程(procedure) 方法(Method)及其他 Object Pascal 在应用标识符时 必须首先说明它们 Object Pascal是强类型语言 它的编译器可以检查确保赋给变量或属性的值是正确的类型 以便于您改正错误 因为Object Pascal是编译语言 所以Delphi的执行速度要比使用解释语言快得多 在使用标识符前说明它们 可以减少程序错误并增加代码的效率  

变量

变量是程序代码中代表一个内存地址的标识符 而此地址的内存内容在程序代码执行时可以被改变 在使用变量前必须对它进行说明 即对它进行命名 并说明它的类型 在所有变量说明以前加上保留字var 变量说明左边是变量的名称 右边则是该变量的类型 中间用(:)隔开  

varValue Sum : IntegerLine : String 

在窗体中加入一个名称为Edit 的编辑框 再加入一个名称(属性Name)为Add的按钮部件 并建立如下的事件处理过程

procedure TForm addClick(Sender: TObject)varX Y: IntegerbeginX := Y := Edit Text := IntToStr(X + Y)end 

在本例中 当按动ADD按钮时 编辑框中显示值 在Object Pascal中 必须确保变量或属性被赋予类型相同或兼容的值 您可以尝试将赋给X的值改为 或去掉IntToStr函数 在编译时会出现类型不匹配的错误 这也说明了Object Pascal强类型语言的特点 Object Pascal有多个预定义的数据类型 您可以说明任何这些类型的变量

整形 Integer的范围是 到 占 字节的内存 Shortint从 到 占 字节内存 Longint从 到 占 字节内存 Byte从 到 占 字节 Word从 到 占 字节内存 它们都是没有小数部分的数字

实型 Single可以包含 到 位有效小数部分 占用 字节的内存 Double类可以包含 到 位有效小数部分 占用 字节的内存 Extended类型包含 到 位有效小数部分 占用 字节内存 Comp可以包含 到 位有效小数部分 占用 字节内存 以上实数类型只有在 / 选项[N+]打开才可以使用 Real可以包含 到 位有效小数部分 占用 字节内存 它只有在和以前Borland Pascal兼容的情况下才使用 否则应使用Double或Extended

布尔型 Boolean 只包含true或False两个值 占用 字节内存

       字符型 Char 一个ASCII字符 字符串类型String一串最长可达 个ASCII字符

指针型 Pointer 可以指向任何特定类型

       字符串型 PChar 是一个指向以零结尾的字符串的指针

除了预定义类型外 Delphi还有自行定义的类型 上述例程的TColor就是这种类型 此外 用户还可以定义自己的数据类型 这部分内容将在下文中详细讲述

整型类别和实型类别都各有五种类型 同一类别中 所有的类型与其他同类别的都相容 您可以将一种类型的值赋给相同类别中不同类型的变量或属性 而只需要这个值的范围在被赋值的变量或属性的可能值范围内 例如 对于一个Shortint型的变量 可以接受在 到 范围内的任意整数 例如Shortint类型的 您不能将 赋给它 因为 已经超出了Shortint的范围了 将范围检查功能打开(选用Options|Project 并在Compiler Options Page中选择Range Checking) 将会检查出一个范围错误 如果Range Checking没有被打开 那么程序代码将可以执行 但被赋值的值将不是您期望的值

在一些情况下 您可以进行不同类型的变量或属性的赋值 一般来说 可以将一个较小范围的值赋给一个较大范围的值 例如 您可以将整型值 赋给一个接受实型值的Double属性而使得值成为 但如果将一个Double类型的值赋给整形变量 则会出现类型错误 如果您不清楚类型的兼容性 可以参阅Delphi的在线帮助中 Type Compatibility and Assignment Compatibility 主题  

常量 

       常量在说明时就被赋予了一个值 在程序执行过程中是不可改变的 下面的例子说明了三个常量  

constPi = Answer = ProductName = Delphi  

象变量一样 常量也有类型 不同的是 常量假设其类型就是常量说明中其所代表的值的类型 上文的三个常量的类型分别是real型 整形 字符串型 常量用 = 表示两边的值是相等的  

过程与函数 

lishixinzhi/Article/program/Delphi/201311/8549

重载一个方法 

       您可以重载(Override)一个方法 通过在后代对象中说明一个与祖先对象重名的方法 就可以重载一个方法 如果想使这个方法在后代对象中作和祖先对象中一样的工作但是使用不同的方式时 您就可以重载这个方法 Delphi不推荐您经常重载方法 除非您想建立一个新的部件 重载一个方法 Delphi编译器不会给出错误或警告提示信息

对象公有域和私有域的说明 

       当使用Delphi的环境来建立应用程序时 您可以在一个TForm的后代对象中加入数据域和方法 也可以通过直接修改对象类型说明的方法来为一个对象加上域和方法 而不是把一个部件加入窗体或事件处理过程中

       您可以在对象的Public或Private部分加入新的数据域和方法 Public和Private是Object Pascal的保留字 当您在工程中加入新的窗体时 Delphi开始建立这个新窗体对象 每一个新的对象都包含public和private指示 以便您在代码中加入数据域和方法 在public部分中说明其它库单元中对象的方法也可以访问的数据域或方法 在private部分的说明有访问的限制 如果您在private中说明域和方法 那么它在说明这个对象的库单元外是不透明的 而且不能被访问 private中可以说明只能被本库单元方法访问的数据域和本库单元对象访问的方法 过程或函数的程序代码可以放在库单元的implementation部分  

访问对象的域和方法 

当您想要改变一个窗体对象的一个域的某个属性 或是调用它的一个方法时 您必须在这个属性名称或调用方法之前加上这个对象的名称 例如 如果您的窗体上有一个编辑框部件 而您需要在运行中改变它的Text属性 需要编写下列的代码  

Edit Text := Wele to Delphi

同样 清除编辑框部件中选中的文本 可以调用TEdit部件的相应方法  

Edit ClearSelection 

       如果您想改变一个窗体对象中一个对象域的多个属性或调用多个方法时 使用with语句可以简化您的程序 with语句在对象中可以和在记录中一样方便地使用 下面的事件处理过程在响应OnClick事件时 会对一个列表框作多个调整  

procedure TForm Button Click(Sender:TObject)beginListBox ClearListBox MultiSelect :=TrueListBox Item Add( One )ListBox Item Add( Two )ListBox Item Add( Three )ListBox Sorted :=TureListBox FontStyle :=[fsBold]ListBox Font Color :=clPurpleListBox Font Name := Times New Roman ListBox ScaleBy( )end 

如果使用了With语句 则程序如下  

procedure TForm Button Click(Sender:TObject)beginwith (ListBox ) dobeginClearMultiSelect :=TrueItem Add( One )Item Add( Two )Item Add( Three )Sorted :=TureFontStyle :=[fsBold]Font Color :=clPurpleFont Name := Times New Roman ScaleBy( )endend 

       使用with语句 您不必在每一个属性或方法前加上ListBox 标识符 在With语句之内 所有的属性或调用方法对于ListBox这个对象而言都是在它的范围内的  

对象变量的赋值 

       如果两个变量类型相同或兼容 您可以把其中一个对象变量赋给另一个对象变量 例如 对象TForm 和TForm 都是从TForm继承下来的类型 而且Form 和Form 已被说明过 那么您可以把Form 赋给Form :

Form :=Form

       只要赋值的对象变量是被赋值的对象变量的祖先类型 您就可以将一个对象变量赋给另一个对象变量 例如 下面是一个TDataForm的类型说明 在变量说明部分一共说明了两个变量 AForm和DataForm  

typeTDataForm = class(TForm)Button :TButtonEdit :TEditDataGrid :TDataGridDatabase :TDatabaseTableSet :TTableSetVisibleSession :TVisibleSessionprivate{私有域说明}public{公有域说明} endvarAForm:TFormDataForm:TDataForm

       因为TDataForm是TForm类型的后代 所以Dataform是AForm的后代 因此下面的赋值语句是合法的

AForm :=DataForm

       这一点在Delphi中是极为重要的 让我们来看一下应用程序调用事件处理过程的过程 下面是一个按钮部件的OnClick事件处理过程

procedure TForm Button Click(Sender:TObject)beginend

       您可以看到TObject类在Delphi的Visual Component Library的顶部 这就意味着所有的Delphi对象都是TObject的后代 因为Sender是TObject类型 所以任何对象都可以赋值给它 虽然您没有看见赋值的程序代码 但事实上发生事件的部件或控制部件已经赋给Sender了 这就是说Sender的值是响应发生事件的部件或控制部件的

       您可以使用保留字is来测试Sender以便找到调用这个事件处理过程的部件或控制部件的类型 Delphi中的一个显示drag and drop的DRAGDROP DPR工程 加载它 可以查阅到DROPFONT PAS库单元的代码 在Memo DragOver方法中检查了一个对象变量的类型 在这种情形下 参数是Source而不是Sender  

procrdure TForm Memo DragOver(SenderSource:TObjectX Y:integerState:TDragStatevar Accept:Boolean)beginAccept :=Source is TLabelend 

       Source参数也是TObject类型 Source被赋值为那个被拖曳的对象 用Memo DragOver方法的目的是确保只有标签可以被拖曳 Accept是布尔型参数 如果Accept为True 那么用户选择的部件可以被拖曳 反之当Accept的值为False时 用户就不可以拖曳选择控制部件 is保留字检查Source是否TLabel的类型 所以Accept只有在用户拖曳一个标签时才为真 并作为变参输出到函数之外

下面的drag and drop展示的Memo DragDrop事件处理过程中也使用了Source参数 这个方法是为了把Memo部件的字型改变成和放入这个备注控制部件的标签一样的字型  

procedure TForm Memo DragDrop(SenderSource:TObjectX Y:Integer)beginMemo Font := (Source as TLabel) Fontend 

       当您在这个事件处理过程中编写赋值语句时 开发人员并不知道用户会放入哪一个标签 只有通过参考这个标签的名称(Source as TLabel)用户才能知道 并把标签类型赋给Memo TFont Source包含了用户拖放控制部件的名称 只有当Source是一个标签时 这个事件处理过程才允许这个赋值发生

建立非可视化对象 

       您在Delphi中使用的大部分对象都是您在设计和运行期间可以看见的部件 例如编辑框 按钮等 一些部件 如通用对话框(Common dialog box)等 在设计时看不见 而在运行时可以看见 另外有些部件 例如计时器(Timer) 数据源(Data Source)部件等 在程序的运行期间没有任何可视化的显示 但您却可以在您的应用程序中使用它们  

说明一个非可视化对象 

       下面 通过一个简单的例子讲述如何建立自己的非可视化对象

       您可以用如下的方法 建立一个自己的TEmployee非可视化对象  

type Temployee = class(TObject)Name := String[ ]Title := String[ ]HourlyPayRate : Doublefunction CalculatePayAmount:Doubleend 

       在这种情况下 TEmployee从TObject继承下来 且包含三个域和一个方法 把您建立的类型说明放在库单元中的说明部分 并和窗体说明放在一起 在这个程序库单元的变量说明部分 说明一个新类型的变量  

varEmployee : TEmployee 

用Create方法建立对象实例 

       TEmployee只是一个对象类型 除非通过一个构造函数的调用从而被实例取代或创建 否则一个对象并不存储在内存中 构造函数是一个方法 它为新对象配置内存并且指向这个新的对象 这个新的对象也被称为这个对象类型的一个实例

       建立一个对象的实例 需要调用Create方法 然后构造函数把这个实例赋给一个变量 如果您想说明一个TEmployee类型的实例 在您访问这个对象的任何域之前 您的程序代码必须调用Create

Employee := TEmployee Create 

       Create方法并没有在TEmployee类型中说明 它继承自TObject类型 因为TEmployee是TObject的子类 所以它可以调用Create方法而创建一个TEmployee实例 然后把它赋给Employee变量 在创建了一个这样的对象后 您就可以象使用其他的Delphi对象一样访问Employee对象了  

撤销对象 

       当您使用完对象后 您应该及时撤销它 以便把这个对象占用的内存释放出来 您可以通过调用一个注销方法来撤销您的对象 它会释放分配给这个对象的内存

       Delphi的注销方法有两个 Destroy和Free Delphi建议使用Free 因为它比Destroy更为安全 同时调用Free会生成效率更高的代码

        您可以用下列的语句释放用完的Employee对象  

Employee Free 

lishixinzhi/Article/program/Delphi/201311/24951


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7869486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存