理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方
发布时间:2020-12-15 10:03:24 所属栏目:大数据 来源:网络整理
导读:转载自:?http://www.cnblogs.com/del/archive/2008/01/15/1039998.html 方法来到类中,以前的特点基本都在; 因为类一般是存在于一个继承链中,所以就有了一些新的概念,譬如: 继承、覆盖; 也有了很多新名称,譬如: 静态方法、虚方法、动态方法、抽象方法、类方
转载自:?http://www.cnblogs.com/del/archive/2008/01/15/1039998.html 方法来到类中,以前的特点基本都在; 因为类一般是存在于一个继承链中,所以就有了一些新的概念,譬如: 继承、覆盖;也有了很多新名称,譬如: 静态方法、虚方法、动态方法、抽象方法、类方法、消息方法. 先从虚方法与动态方法开始吧 //下面的类中就定义了两个虚方法(virtual)、两个动态方法(dynamic) TMyClass = class ? procedure Proc1(x,y: Real); virtual; ? function Fun1(x,y: Real): Real; virtual; ? procedure Proc2(x,y: Real); dynamic; ? function Fun2(x,y: Real): Real; dynamic; end; TBass = class ? procedure Proc(x,y: Real); virtual; ? function Fun(x,y: Real): Real; dynamic; end; TChild = class(TBass) ? procedure Proc(x,y: Real); override; ? function Fun(x,y: Real): Real; override; end; {正是因为这种机制而形成了多态} //那虚方法和动态方法有什么区别呢? 每个类都内含着两个表: 虚方法表(VMT)和动态方法表(DMT); VMT 表包含着本类与其所有父类的虚方法 - 那一般会是一个比较庞大的表; DMT 表只包含本类的动态方法 - 如果要调用其上层类的动态方法,只能逐级查找; 因此,使用虚方法速度上会有优势,使用动态方法会节约内存; 在 Delphi 初期只有 virtual 而没有 dynamic ; 后来随着 VCL 日渐庞大,才有了 dynamic ; 譬如类的事件方法一般都是在早期定义,为了节约空间,事件方法在 VCL 中基本都定义成了 dynamic ; 这样看来: virtual 和 dynamic 并没有太多区别,一个侧重速度、一个节约空间; 它们是可以互相代替的! 另外: 因为它们区别不大,并且是先有 virtual,所以人们也习惯于把"虚方法"和"动态方法"都称作"虚方法". (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |