Delphi的学习笔记十二——方法1

1.类的虚方法(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):
1.1 VMT 表包含着本类与其所有父类的虚方法 - 那一般会是一个比较庞大的表;
1.2 DMT 表只包含本类的动态方法 - 如果要调用其上层类的动态方法, 只能逐级查找;
因此,使用虚方法速度上会有优势,使用动态方法会节约内存。
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指示字的方法,是无法被继承和覆盖的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值