理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法 - 万一...
来源:百度文库 编辑:神马文学网 时间:2024/04/28 08:02:22
理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法
方法来到类中, 以前的特点基本都在;因为类一般是存在于一个继承链中, 所以就有了一些新的概念, 譬如: 继承、覆盖;
也有了很多新名称, 譬如: 静态方法、虚方法、动态方法、抽象方法、类方法、消息方法.
先从虚方法与动态方法开始吧
//下面的类中就定义了两个虚方法(virtual)、两个动态方法(dynamic)TMyClass = classprocedure 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 = classprocedure 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 , 所以人们也习惯于把"虚方法"和"动态方法"都称作"虚方法".
理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法 - 万一...
理解 Delphi 的类(十一) - 深入类中的方法[2] - 关于覆盖与重定义 - 万一...
理解 Delphi 的类(十一) - 深入类中的方法[3] - 方法在实现时的参数省略 -...
Delphi关于多线程同步的一些方法
RXLib V2.75在Delphi 7.0中的安装方法
RXLib V2.75在Delphi 7.0中的安装方法
深入分析冰毒的危害及其戒断方法1
TUXEDO 与 ORACLE 动态方法四的应用示例
利用.net反射动态调用指定程序集的中的方法 - 系统架构与NET技术 - 博客园
利用.net反射动态调用指定程序集的中的方法 - 系统架构与NET技术 - 博客园
在delphi中编写控件的基本方法
Delphi 线程安全的三种方法(转)
出货的方法--操盘手培训十一
不生病的具体方法十一
十一中方法调控你的情绪
十一条电脑杀毒的方法
怎样理解易经阴阳五行的思维方法
理解股票投资的五种方法
全面理解虚拟内存及优化方法1
做简单的动态签名档的方法
java中的类和方法的修饰符
杨洪斌:我所理解的期货与股票交易方法与实战评说
动态网站首页的静态生成方法
捕捉动态的三种基本方法