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