Delphi的学习笔记十二——方法1
2012-12-31 14:39
337 查看
1.类的虚方法(virtual)和动态方法(dynamic)
方法的定义:
在子类中要实现父类的方法,就必须加上override,例如:
虚方法和动态方法的区别。
每个类都内含着两个表: 虚方法表(VMT)和动态方法表(DMT):
1.1 VMT 表包含着本类与其所有父类的虚方法 - 那一般会是一个比较庞大的表;
1.2 DMT 表只包含本类的动态方法 - 如果要调用其上层类的动态方法, 只能逐级查找;
因此,使用虚方法速度上会有优势(是实现多态行为的最有效的实现方式),使用动态方法会节约内存(大量要被许多派生类继承的方法、但只是偶尔才覆盖)。
reintroduce(重新引入):当隐藏一个先前声明的虚方法时,不给出警告信息(要使用新方法隐藏继承下来的虚方法)。
2.类的静态方法
静态方法是默认的,如果不是虚方法(virtual)或者纯虚方法,则它就是静态方法。静态方法就是给类属性来调用的,它可以存在于私有区。例如:
3.类的类方法。
类方法是通过类名就可以访问的方法。类方法不能在private 和 protected 区;类方法不能是虚方法;类方法只能使用类中的、在对象实例化以前的数据。
3.1 类方法的定义
3.2 类方法的实现与其他方法的实现类似
3.3 类方法的调用
类方法的调用可以通过两种方式来调用:1是通过类名.方法的形式,例如TMyClass.alert();2.是通过类的对象名来进行调用
4.抽象方法
抽象方法是为了实现接口的功能而存在的,抽象方法是一个虚方法或者动态方法,也叫纯虚方法。抽象方法在本类中只有定义、没有实现;方法是在子类中实现。如果一个类中有抽象方法,那么该类就为抽象类,抽象类只能通过子类来实例化。最典型的抽象类是TString,其实例化需要用TStringList来实现。在Delphi7及其以前的版本中,我们需要通过查看类中是否包含抽象方法来判断这个类是否为抽象类。
4.1 抽象方法的定义
4.2 抽象方法的实现
抽象方法的实现与实现虚方法或者动态方法一致,通过覆盖(Override)指示字来实现。
5.如果带有sealed和final指示字的方法,是无法被继承和覆盖的。
方法的定义:
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):
1.1 VMT 表包含着本类与其所有父类的虚方法 - 那一般会是一个比较庞大的表;
1.2 DMT 表只包含本类的动态方法 - 如果要调用其上层类的动态方法, 只能逐级查找;
因此,使用虚方法速度上会有优势(是实现多态行为的最有效的实现方式),使用动态方法会节约内存(大量要被许多派生类继承的方法、但只是偶尔才覆盖)。
reintroduce(重新引入):当隐藏一个先前声明的虚方法时,不给出警告信息(要使用新方法隐藏继承下来的虚方法)。
2.类的静态方法
静态方法是默认的,如果不是虚方法(virtual)或者纯虚方法,则它就是静态方法。静态方法就是给类属性来调用的,它可以存在于私有区。例如:
TMyClass = class(TObject) private class var FName: string; class procedure SetName(const Value: string); static; {静态类方法又多了一个 static 指示字} published class property Name: string read FName write SetName; end;
3.类的类方法。
类方法是通过类名就可以访问的方法。类方法不能在private 和 protected 区;类方法不能是虚方法;类方法只能使用类中的、在对象实例化以前的数据。
3.1 类方法的定义
TMyClass = class(TObject) class procedure alert(s:string); end;
3.2 类方法的实现与其他方法的实现类似
3.3 类方法的调用
类方法的调用可以通过两种方式来调用:1是通过类名.方法的形式,例如TMyClass.alert();2.是通过类的对象名来进行调用
4.抽象方法
抽象方法是为了实现接口的功能而存在的,抽象方法是一个虚方法或者动态方法,也叫纯虚方法。抽象方法在本类中只有定义、没有实现;方法是在子类中实现。如果一个类中有抽象方法,那么该类就为抽象类,抽象类只能通过子类来实例化。最典型的抽象类是TString,其实例化需要用TStringList来实现。在Delphi7及其以前的版本中,我们需要通过查看类中是否包含抽象方法来判断这个类是否为抽象类。
4.1 抽象方法的定义
TMyClass = class(TObject) procedure Proc1; virtual; abstract; {抽象方法首先应该是一个虚方法或动态方法} function Fun: string; dynamic; abstract; {抽象方法也叫纯虚方法} end;
4.2 抽象方法的实现
抽象方法的实现与实现虚方法或者动态方法一致,通过覆盖(Override)指示字来实现。
5.如果带有sealed和final指示字的方法,是无法被继承和覆盖的。
相关文章推荐
- Delphi的学习笔记十二——方法2
- Delphi的学习笔记十二——方法2
- Delphi的学习笔记十二——方法
- Delphi的学习笔记十二——方法1
- Delphi学习笔记五——方法
- swift语言的学习笔记十二(初始化方法)
- ext4 学习笔记(十二)[样式操作系方法](白鹤翔第一季)
- Java学习笔记十二:Java中方法的重载
- Delphi 2010学习笔记(21)---匿名方法---2011-01-26
- jQuery学习笔记之jQuery原型属性和方法
- 网络爬虫学习笔记——GET方法下几种常用情况
- java 从零开始,学习笔记之基础入门<Static>(十二)
- AJAX学习笔记之xml的JQ使用方法
- python 系统学习笔记(十二)---os os.path os.walk
- 马良建模学习笔记——软包制作十二
- 学习笔记-java基本类型的包装类,常用方法
- 【学习笔记】【第一章】【Verilog HDL数字集成电路设计方法概述】
- 『iOS学习笔记』 - 变量 属性 方法 实现
- IOS学习笔记(十二)之IOS开发之表视图(UITableView)的相关类,属性与表视图实现学习(二)
- iOS学习笔记56(Runtime)-Objective-C Runtime 运行时之三:方法与消息