当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 标题:Delphi 对象模型学习笔记关键词:Delphi 对象模型 作者:dREAMtHEATER难度:普通[] 中等[x] 高级[]http://dREAMtHEATER.yeah.netE-Mail:NoteXPad@163.com完成日期:2004年08月21日 摘要 Borland ...
 

 

 ·用delphi实现ping    »显示摘要«
    摘要: 看了好多次有网友的提出关于用delphi实现ping的问题,今天又看到了;所以就将这个功能写成一个类,并且提供一个函数方便大家的使用! 函数procedure pinghost(ip:string;var info:string);ip:目标ip地址;info:ping了以后产生的信息(1)或(2);(1)成功信息ip 发送测试的字符数 返回时间(2)出错信息can not find h......
 ·程序间参数传递    »显示摘要«
    摘要: 风花雪月 e梦情缘网络代号:wnhoo or sos_admin网名:e梦缘mail:wnhoo@163.com 功能:第一次執行的時候…會開啟project1.exe第二次執行的時候…不開啟project1.exe(因程式已執行)…但会将參數會丟給已執行的project1.exe第3次執行的時候…不開啟project1.exe(因程式已執行)&......


Delphi 对象模型学习笔记

标题:delphi 对象模型学习笔记 【程序编程相关:Delphi控制Excel

【推荐阅读:多层数据库开发一:设计数据库应用程序

关键词:delphi 对象模型 【扩展信息:ado异步查询的解决方案

作者:dreamtheater

难度:普通[]  中等[x]  高级[]

http://dreamtheater.yeah.net

e-mail:notexpad@163.com

完成日期:2004年08月21日

摘要

    borland object pascal 对象模型(现在已经正是命名为 delphi 语言)与其他 oop 语言一样,都提供了一些基础服务: 如对象创建服务.对象释放服务.对象识别服务.对象信息服务,除此之外在编译器与 vcl framework 级别上提供了一些额外的服务,例如对象消息分派服务.

前言

   首先说一下,delphi 对象模型涉及的概念非常多,因此在这篇笔记中,我无法将所有的知识点都点到,只是理出一条线方便后来人.可以说这部分内容不是很容易搞懂的,建议大家多看 vcl 源码,它可真是一座金山,有你挖不完的金子,每次你都会有意外收获的.另外有些概念恐怕看源码也不见得搞得懂,这时候你可以通过 debug 看看反汇编的结果,通常会看到编译器为你做了很多幕后工作.有了这种钻研精神,我想恐怕没有什么问题解决不了的.

正文

    delphi 中万物之源是 tobject,不管你自定义的类是否指明了所继承的父类,一定都是 tobject 的子孙,一样具有 tobject 定义的所有特性[3].由于在 tobject 中已经提供了大部分的对象基础服务,因此继承类自然而然也就具备了这些对象服务,强烈建议每一个学 delphi 的朋友都要仔细研习一下 tobject 的源码.

    一个对象的生命周期是从它被创建那一刻开始.通常我们都用类似 tmyobject.create 这样的语句创建对象,那么你知道在这一行代码的后面到底发生了什么事情吗?可以说,发生了无数的事情,对象也从此有了生命.

 

一,对象创建服务

    凡是声明为 constructor 的方法都属于构造函数,不管你用不用 create 作为方法名称,但建议只用 create 作为方法名称;由此可知编译器是根据 constructor 这个指示字(directive)来生成构造代码,而不是根据 create 这个方法名称,相当一部分人对构造函数的实现过程存在误解.

    一个类实例的生成需要经过对象内存分配.内存初始化.设置对象执行框架三个步骤.

    编译器首先调用 system._classcreate 进行对象内存分配.内存初始化的工作.而 system._classcreate 调用 tobject 类的虚方法 newinstance 建立对象的实例空间,继承类通常不需要重载 tobject.newinstance,除非你使用自己的内存管理器,因此缺省是调用 tobject.newinstance.tobject.newinstance 方法将根据编译器在类信息数据中初始化的对象实例尺寸(tobject.instancesize),调用系统缺省的 memorymanager.getmem 过程为该对象在堆(heap)中分配内存,然后调用 tobject.initinstance 方法将分配的空间初始化.initinstance 方法首先将对象空间的头4个字节初始化为指向对象类的 vmt 的指针,然后将其余的空间清零.如果类中还设计了接口,它还要初始化接口表格(interface table).

    当对象实例在内存中分配且初始化后,开始设置执行框架.所谓设置执行框架就是执行你在 create 方法里真正写的代码.设置执行框架的规矩是先设置基类的框架,然后再设置继承类的,通常用 inherited 关键字来实现.


...   下一页
 ·mscomm32的简单应用    »显示摘要«
    摘要: 风花雪月 e梦情缘网络代号:wnhoo or sos_admin网名:e梦缘mail:wnhoo@163.com 因为看到很多网友对串口通信的问题,其中最多的是关于元件的选用与通信的实现。我想您不论用什么类型的控件操作rs232均是一样的,我比较喜欢用mscomm32,因为它是ms的,且是vb程式设计软件自带的,并且免费哦还有一个就是moxa的rs232专业开发包pcomm,到www.moxa......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE