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

 我来答
新科技17
2022-11-25 · TA获得超过5898个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:74.6万
展开全部

   重载一个方法 

       您可以重载(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);   begin  ListBox Clear;  ListBox MultiSelect :=True;  ListBox Item Add( One );  ListBox Item Add( Two );  ListBox Item Add( Three );  ListBox Sorted :=Ture;  ListBox FontStyle :=[fsBold];  ListBox Font Color :=clPurple;  ListBox Font Name := Times New Roman ;  ListBox ScaleBy( );  end; 

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

  procedure TForm Button Click(Sender:TObject);   begin  with (ListBox ) do  begin  Clear;  MultiSelect :=True;  Item Add( One );  Item Add( Two );  Item Add( Three );  Sorted :=Ture;  FontStyle :=[fsBold];  Font Color :=clPurple;  Font Name := Times New Roman ;  ScaleBy( );  end;  end; 

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

   对象变量的赋值 

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

  Form :=Form ;

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

  type  TDataForm = class(TForm)  Button :TButton;  Edit :TEdit;  DataGrid :TDataGrid;  Database :TDatabase;  TableSet :TTableSet;  VisibleSession :TVisibleSession;  private{私有域说明}  public{公有域说明}   end;   var  AForm:TForm;  DataForm:TDataForm;

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

  AForm :=DataForm;

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

  procedure TForm Button Click(Sender:TObject);  begin  end;

       您可以看到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:TObject;X Y:integer;  State:TDragState;var Accept:Boolean);  begin  Accept :=Source is TLabel;  end;  

       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:TObject;X Y:Integer);  begin  Memo Font := (Source as TLabel) Font;   end; 

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

   建立非可视化对象 

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

   说明一个非可视化对象 

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

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

  type   Temployee = class(TObject);  Name := String[ ];  Title := String[ ];  HourlyPayRate : Double;  function CalculatePayAmount:Double;  end; 

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

  var  Employee : 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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式