随笔分类 -  Delphi-OO研究

摘要:Classes and objects(类和对象)类(或者类类型)定义了一个结构,它包括字段(也称为域)、方法和属性;类的实例叫做对象;类的字段、方法和属性被称为它的部件(components)或成员。• 字段在本质上是一个对象的变量。和记录的字段类似,类的字段表示一个类实例的数据项;• 方法是一个 阅读全文
posted @ 2016-03-21 22:41 findumars 阅读(5497) 评论(0) 推荐(0)
摘要:不是只有实例才有VMT,举个例子,各实例的VMT地址是相同的: 再和类的VMT比较: 这也相当于说,类的第一项元素就是VMT,而VMT的第一项内容是一个地址,它是指向一个函数的指针。 http://blog.csdn.net/linzhengqun/article/details/1755493 阅读全文
posted @ 2016-03-21 19:19 findumars 阅读(325) 评论(0) 推荐(0)
摘要:主要是TObject那些虚函数,到底放在了哪里? 阅读全文
posted @ 2016-03-19 20:10 findumars 阅读(356) 评论(0) 推荐(0)
摘要:访问祖先类的虚方法 问题提出 在子类覆盖的虚方法中,可以用inherited调用父类的实现,但有时候我们并不需要父类的实现,而是想跃过父类直接调用祖先类的方法。 举个例子,假设有三个类,实现如下: type TClassA = class procedure Proc; virtual; end; 阅读全文
posted @ 2016-03-18 21:58 findumars 阅读(275) 评论(0) 推荐(0)
摘要:Every Delphi class is defined internally by its vmt—​its virtual-method table. The vmt contains a list of pointers to a class’s virtual methods. It al 阅读全文
posted @ 2016-03-16 21:16 findumars 阅读(1530) 评论(0) 推荐(0)
摘要:下面是一段常见的的Delphi代码,在过程的开头声明本过程所需要的全部局部变量: C++程序员会以为obj这个变量就是TObject对象实例本身,会以为这一句是在栈上声明并构造了TObject类的一个对象实例,他们会与下面的C++代码混淆: 牢记一点,在Delphi里,永远不可能在栈上构造一个对象, 阅读全文
posted @ 2016-03-16 18:31 findumars 阅读(2001) 评论(0) 推荐(0)
摘要:前几天在CSDN社区看到一篇《如何得到自身单元名称》的帖子,其中一位名为sdzeng网友给出了答案。受此启发,自己写了一个函数,用来获取指定类的所有祖先类的名称及其所在的单元名称。 使用举例 返回结果如下: TObject(Classes)TPersistent(Classes)TComponent 阅读全文
posted @ 2016-03-15 21:43 findumars 阅读(1332) 评论(0) 推荐(0)
摘要:Delphi的VCL从TPersistent开始支持RTTI(RuntimeTypeInfo)运行时类型信息,它是通过{$M+}编译指令提供了RTTI的功能.M打开以后,Delphi在编译该对象时,会把对象的类型信息编译进可执行文件,这样在运行时就可以动态地获得对象的属性和方法等信息.因为所有的VC 阅读全文
posted @ 2016-02-05 23:00 findumars 阅读(864) 评论(0) 推荐(0)
摘要:知识点1:堆和栈 每个应用程序可以获得的内存空间分为两种:堆(heap)和栈(stack)。 堆又称为“自由存储区”,其中的内存空间的分配与释放是必须由程序员来控制的。例如,用GetMem函数获取了一定大小的内存空间,则在使用完后,必须调用FreeMem函数将空间释放,否则就会发生所谓的“内存泄漏” 阅读全文
posted @ 2016-02-05 22:59 findumars 阅读(408) 评论(0) 推荐(0)
摘要:要说灵活性,是C++更强。我自己开发已经好几次碰到需要多继承的情况了。 但是Delphi强迫继承TObject,虽然是单继承,但是提供了相当多的强力功能。要说强大,那还是Delphi当仁不让。 摘自《Delphi深度历险》 阅读全文
posted @ 2016-02-05 06:49 findumars 阅读(352) 评论(0) 推荐(0)
摘要:发了上一篇博客.盒子上有朋友认为Class的构造和析构延迟加载.是在Unit的初始化后调用的Class的构造.在Unit的反初始化前调用的Class的析构函数.为了证明一下我又做了个试验unit Unit2;interfaceType TClassTest = class class constru... 阅读全文
posted @ 2015-12-10 22:06 findumars 阅读(904) 评论(0) 推荐(0)
摘要:Delphi2010发布了.虽然凭着对Delphi的热爱第一时间就安装了,但是现在可能是年纪大了,对新事物缺乏兴趣了.一直都没有仔细研究.今天有点时间试了一下新功能.本来C#和Delphi.NET是支持类的构造函数/析构函数的(注意不是实例的构造和析构).也就是在模块初始化/卸载的时候会调用.这样有... 阅读全文
posted @ 2015-12-10 22:03 findumars 阅读(1118) 评论(0) 推荐(0)
摘要:虽然用delphi也有7,8年了,但大部分时间还是用在系统的架构上,对delphi底层还是一知半解,今天在网上看到一篇文章写得很好,虽然是07年的,但仍有借鉴的价值。现摘录如下:Delphi程序设计之--经验技巧这些日子太忙了,今天把剩下的部分贴完,希望对大家有用。看过前一篇的都知道此文的作者和出处... 阅读全文
posted @ 2015-12-02 06:09 findumars 阅读(515) 评论(0) 推荐(0)
摘要:测试半天,原来是因为这个原因。下面例子中,Result:=''必须写,否则其结果会被累计,真是昏倒!!function MyPaths(tache: IXMLTaskType) : String;var i: integer;begin result := ''; for i :=... 阅读全文
posted @ 2015-10-27 23:27 findumars 阅读(407) 评论(0) 推荐(0)
摘要:Ifyoudon'texplicitlyinitializeaglobalvariable,thecompilerinitializesitto0.Objectinstancedata(fields)arealsoinitializedto0.OntheWiin32platform,theconte... 阅读全文
posted @ 2015-09-02 20:30 findumars 阅读(2796) 评论(0) 推荐(0)
摘要:一、override 重载type TFigure = class procedure Draw; virtual;//(我的理解是)父类中可以使用父类的,子类中使用子类的。与“四”是有区别的。 end; TRectangle = class(TFigure) procedure... 阅读全文
posted @ 2015-08-21 18:32 findumars 阅读(3810) 评论(0) 推荐(1)
摘要:类的成员,如果没有private、public等显示什么,直接在class下面,没有写访问权限的限定符,这种成员是不是默认的访问权限啊?还是publish的访问权限啊?----------------------------------------------------------什么答案都有,就... 阅读全文
posted @ 2015-08-21 15:54 findumars 阅读(796) 评论(0) 推荐(0)
摘要:var t: TBitBtn;begin t:=TBitBtn.Create(nil); t.Name:='BitBtn100'; t.parent :=Self; // 这里下断点end;一路跟踪就会发现到TWinControl.UpdateShowing函数,它发现当前控件尚未有句柄,因... 阅读全文
posted @ 2014-09-14 04:41 findumars 阅读(565) 评论(0) 推荐(0)
摘要:8.4 Delphi自定义组件(3)http://tech.163.com 2006-04-29 11:49:34 来源:清华大学出版社 网友评论0条论坛3. 测试未安装的组件在将新组件安装在Component Palette之前就能测试组件运行时的动作。这对于调试新组件特别有用,而且还能用同样的... 阅读全文
posted @ 2014-07-16 01:08 findumars 阅读(522) 评论(0) 推荐(0)
摘要:1. 抽象类法(VCL不推荐);第一,允许创建抽象类对象,因为语法没问题,但允许其错误。第二,接口更好。第三,如果是混合抽象类,则推荐Place Holder方法2. Place Holder(占位):父类虚拟函数为空白函数,但不是抽象方法。例如TCanvas。避免了抽象类的缺点3. 逐渐增加法:子... 阅读全文
posted @ 2014-05-16 04:59 findumars 阅读(426) 评论(0) 推荐(0)