虚方法与动态方法
来源:互联网 发布:淘宝海景房是什么意思 编辑:程序博客网 时间:2024/06/10 00:06
虚方法与动态方法
方法来到类中, 以前的特点基本都在;
因为类一般是存在于一个继承链中, 所以就有了一些新的概念, 譬如: 继承、覆盖;
也有了很多新名称, 譬如: 静态方法、虚方法、动态方法、抽象方法、类方法、消息方法.
先从虚方法与动态方法开始吧
--------------------------------------------------------------------------------
//下面的类中就定义了两个虚方法(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 ;
这样看来: virtual 和dynamic 并没有太多区别, 一个侧重速度、一个节约空间; 它们是可以互相代替的!
另外: 因为它们区别不大, 并且是先有virtual , 所以人们也习惯于把"虚方法"和"动态方法"都称作"虚方法".
- 虚方法与动态方法
- 动态方法与静态方法的区别
- iOS静态方法与动态方法
- 静态方法与动态方法的区别
- C# 静态方法与动态方法
- 静态方法,虚方法和动态方法
- 理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法
- 动态方法
- 备忘录方法与动态规划比较
- 备忘录方法与动态规划比较
- 动态方法决议与消息转发
- 动态类型 的 概念 与 识别方法
- Class.forName方法与动态加载
- C# 中动态方法与静态方法的误区
- java 静态方法static 与 动态方法的使用对比
- 抽象方法与虚方法
- 虚方法与抽象方法
- 虚拟方法 对比 动态方法
- n个元素的数组中找出前K个最大数最有效算法O(nlg(k))
- MFC窗口启动最大化
- Linux FM stuff
- HTML A标签调用javascript方法的几种方法
- 京东今天还在用 .NET 架构的原因是什么?
- 虚方法与动态方法
- serialPort1_DataReceived 执行二次 messagebox
- Using Code Analysis with Visual Studio 2010 to Improve Code Quality
- Ehcache cache 无法进行缓存处理
- 【Java基础】——之Final
- V4L2 - Linux下视频驱动模型
- 访问控制列表ACL
- FINDBUGS错误:Deadstore to local variable
- 透过标识看素质