捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >基础知识 > 正文
16 2020.02

理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法

点击次数:601 更新时间:2020-2-16 11:24:16  【打印此页

方法来到类中, 以前的特点基本都在;
因为类一般是存在于一个继承链中, 所以就有了一些新的概念, 譬如: 继承、覆盖;
也有了很多新名称, 譬如: 静态方法、虚方法、动态方法、抽象方法、类方法、消息方法.

 

先从虚方法与动态方法开始吧

//下面的类中就定义了两个虚方法(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;

 

//定义成虚方法或动态方法, 就意味着在后来的子类中将要被覆盖(override), 也就是重写
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 ;


这样看来: virtualdynamic 并没有太多区别, 一个侧重速度、一个节约空间; 它们是可以互相代替的!


另外: 因为它们区别不大, 并且是先有 virtual , 所以人们也习惯于把"虚方法"和"动态方法"都称作"虚方法"

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:601 更新时间:2020-2-16 11:24:16  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修