Delphi关键词
2015-07-21 17:07:41   来源:   评论:0 点击:

Delphi关键词 interface,implementation,initialization,finalization第一讲:Delphi关键词-interface,implementation,initialization,fin
Delphi关键词 interface,implementation,initialization,finalization
 

第一讲:Delphi关键词-interface,implementation,initialization,finalization

 

01.名称:【interface】、【implementation】、【initialization】、【finalization】
02. 功能:与单元文件相关的关键字。
03.        interface :单元文件的接口部分,也用于定义接口类型,可以理解为C或者C++的头文件。
04.        implementation :单元文件的实现部分,可以理解为.cpp文件。
05.        initialization :单元文件的初始化部分。
06.        finalization :单元文件的反初始化部分。
07. 
08.  
09.{ 单元文件结构 }
10.unit Unit1;
11.interface
12.  { 引用其他单元、定义数据类型、定义过程函数、定义变量常量等 }
13.  { 此处定义的类型或数据对其他单元是可见的(可访问的) }
14.implementation
15.  { 引用其他单元、实现接口部分定义的类型、过程、函数的具体代码 }
16.  { 此处定义的类型或变量只对本单元可见 }
17.initialization
18.  { 这里编写单元被载入时所要调用的方法 }
19.  { 通常是初始化一些不能自动初始化的对象,也可以不用 }
20.  { initialization 最常用的情况是对 OLE 对象做初始化 }
21.finalization
22.  { 这里编写单元被释放时所要调用的方法 }
23.  { 通常是释放掉单元中不能自动释放的对象,也可以不用 }
24.  { finalization 最常用的情况是对 OLE 对象做反初始化 }
25.end.
26.  
27./*****深入分析区******************我是分界线帅哥*********下面文字来自大熊-编程学习博客*********************/ 
28.【interface】、【implementation】比较容易理解,就不详细说名。当然interface得用来声明接口用,关于接口的思想我这里只简单提一下,想详细了解的可以去百度一下OO(面向对象编程)。
29.       这里我用java的接口思想来说阐述。所谓接口其实就是定义了一个类,里面只申明了方法,而不对方法做处理,就是空方法。而有些时候你必须要用这些类,那就不得不去写这些方法,一个也不能漏掉的写。就好比定了一个规矩,你必须服从!
30.       接口声明 MyInterface = interface //这样MyInterface就是一个接口了!
31.  
32.  
33.【initialization】、【finalization】比较少用到,这里咱就谈谈他们哥俩的用法!
34./**************************************************
35.  
36.initialization
37.ShowMessage('1 ini');{单元初始化代码}
38.finalization
39.ShowMessage('1 final');{单元退出时的代码}
40.end.
41.****************************************************/
 

initialization —— 在单元中放在文件结尾前,包含用来初始化单元的代码,它在主程序运行前运行并且只运行一次。
finalization —— 在单元中放在 initialization 和 end. 之间,包含了单元退出时的代码。在程序退出时运行并且只运行一次,不能脱离initialization独立存在。
为了更好的说明,我们与下面的事件做比较:
OnClose —— 在点击关闭按钮或执行该事件时调用。
OnCreate —— 在窗体创建时调用。(先执行他,然后才创建窗体)
OnDestroy —— 在窗体销毁时调用,一般用来销毁程序员自己定义(自己定义、创建,而不是直接从控件板拖拉过来的控件)的对象、变量、指针等等。
 
      下面是执行顺序(如果程序中没有 initialization、 OnCreate、 OnClose、 OnDestroy、 finalization 中的任何一项,则相应跳过即可):
程序启动 –> 执行 initialization 处的代码 –> 执行窗体的构造函数并创建相应窗体和单元中的对象(如拖拉的控件对象,全局变量等) –> 执行 OnCreate 事件 –> 程序运行 –> 关闭主窗体(此处指调用主窗体的Close或点击主窗体的关闭按钮) –> 执行 OnClose 事件 –> 执行 OnDestroy 事件 –> 执行 finalization 处的代码;
上面是针对单个窗体而言的,如果是多个窗体呢??!!!
 
我们新建一工程,创建3个Form,分别是form1、form2、form3,默认情况下form1为主窗体。
<1 begin>
程序启动 –> 执行 initialization 处的代码(先 form1 然后 form2 最后 form3 ) –> 执行窗体的构造函数并创建相应窗体和单元中的对象(如拖拉的控件对象,全局变量等) –> 执行 OnCreate 事件(先 form1 然后 form2 最后 form3 ) –> 程序运行 –> 关闭主窗体(此处指调用主窗体的Close或点击主窗体的关闭按钮) –> 执行主窗体的 OnClose 事件 –> 执行 OnDestroy 事件(先 form3 然后 form2 最后 form1 ,注意哟,顺序倒过来了。) –> 执行 finalization 处的代码(先 form3 然后 form2 最后 form1 ,注意哟,顺序倒过来了。)
<1 end>
 
经过测试我们会发现

1.OnClose事件必须绑定到点击窗口的关闭上,点击关闭按钮时才会执行OnClose;
2.在窗体2,或者3上面点击关闭按钮时只会执行OnClose,不会执行 OnDestroy、 finalization ;

 

 

01./********************************
02.  
03.begin
04.  Application.Initialize;
05.  Application.MainFormOnTaskbar := True;
06.  Application.CreateForm(TForm1, Form1);
07.  Application.CreateForm(TForm2, Form2);
08.  Application.CreateForm(TForm3, Form3);
09.  Application.Run;
10.end.
11.***********************************/
 

3.在窗口1执行玩OnClose后程序会马上执行到上面end.处,除了主窗口,其他窗口都会全部关闭(不知道是调用哪个事件关闭窗口的,不是close也不是destory),感兴趣的同学帮忙解答一下!!!
4.如果在form1中USES了form2,这个时候会先执行form2的 finalization和 initialization,其他事件不变;
5.为什么 OnDestroy 和 OnCreate 的顺序相反?为什么 finalization和 initialization 的顺序相反?

       这些方法的调用是通过栈的方式来记录的, OnCreate与 initialization相当于把一些内存入栈,OnDestroy, finalization相当于释放栈内资源即出栈。
入栈:栈底->IF1->IF2->IF3->CF1->CF2->CF3   I表示initialization,F表示Form,C表示OnCreate;
出战顺序:DF3->DF2->DF1->FF3->FF2->FF1  D表示OnDestroy,F表示Form,FF表示 finalization Form;
 

相关热词搜索:interface implementation

上一篇:Delphi namespace
下一篇:Delphi单元文件Unit结构详细解释

分享到: function postToWb(){ var _t = encodeURI(document.title); var _url = encodeURIComponent(document.location); var _appkey = encodeURI("cba3558104094dbaa4148d8caa436a0b"); var _pic = encodeURI(''); var _site = ''; var _u = 'http://v.t.qq.com/share/share.php?url='+_url+'&appkey='+_appkey+'&site='+_site+'&pic='+_pic+'&title='+_t; window.open( _u,'', 'width=700, height=680, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, location=yes, resizable=no, status=no' ); } document.write(''); document.write(''); document.write(''); document.write(''); document.write(''); 收藏