虚拟方法
TBase = class(TObject)
public
procedure VM1; virtual;
end;
TDerived1 = class(TBase)
public
procedure VM2; virtual;
end;
动态方法
把virtual换成dynamic
对比
动态方法可以大幅减少VMT大小,但效率稍慢;
原因:虚拟方法为每一个子类创建一个VMT,并包含父类所有方法,在调用方法时直接在当前VMT中调用。
动态方法只为每一个子类创建一个包含特性方法的VMT,在调用父方法时需通过自身VMT跳转到父VMT中,在经由父类的动态方法指针调用VMT。
动态方法一般用在继承层级少,但继承方法多时。