Delphi 系统[24]关键字和保留字 virtual、dynamic、abstract、inline、static - 类方法类型
1、定义:
2、示例:
{ 虚拟方法 }
TObject = class
public
procedure Dispatch(var Message); virtual;
destructor Destroy; virtual;
end;
---------------------------------------------------------------------------------------
{ 动态方法 }
TCustomForm = class
protected
procedure DoHide; dynamic;
procedure DoShow; dynamic;
end;
---------------------------------------------------------------------------------------
{ TStrings 中的抽象方法 }
TStrings = class
protected
function Get(Index: Integer): string; virtual; abstract;{ 这里只需要定义,具体功能靠子类去实现 }
function GetCount: Integer; virtual; abstract; { 这里只需要定义,具体功能靠子类去实现 }
end;
--------------------------------------------------------------------------------------
{ 内联函数 inline}
function Test(S: string): string; inline;
begin
Result := ‘显示结果:‘ + S;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := Test(Caption);
{ 此处调用了内联函数,所以,在编译时,此处的代码就被改成了 Caption := ‘显示结果:‘ + Caption; 直接将内联函数的代码搬过来进行编译 }
end;
3、关于 virtual 和 dynamic 方法的一些说明:
要使方法虚拟或动态,请在其声明中包含virtual或dynamic指令。与静态方法不同,虚拟方法和动态方法可以在子类中重写。调用重写的方法时,方法调用中使用的类或对象的实际(运行时)类型(而不是声明的变量类型)决定要激活的实现。
要重写方法,请使用override指令重新声明它。重写声明必须在其参数的顺序和类型以及结果类型(如果有)上与祖先声明匹配。
在以下示例中,TFigure中声明的Draw方法在两个子类中被重写:
type
TFigure = class
procedure Draw; virtual;
end;
TRectangle = class(TFigure)
procedure Draw; override;
end;
TEllipse = class(TFigure)
procedure Draw; override;
end;
给定这些声明,下面的代码说明了通过实际类型在运行时发生变化的变量调用虚拟方法的效果。
var
Figure: TFigure;
begin
Figure := TRectangle.Create;
Figure.Draw; // calls TRectangle.Draw
Figure.Destroy;
Figure := TEllipse.Create;
Figure.Draw; // calls TEllipse.Draw
Figure.Destroy;
end;
只能重写虚拟方法和动态方法。但是,所有方法都可以重载;请参阅重载方法。
虚拟与动态:
注:只有在有明显的、可观察到的好处时才使用动态方法。通常,使用虚拟方法。
4、其他,请参考:链接
创建时间:2021.08.16 更新时间:
Delphi 系统[24]关键字和保留字 virtual、dynamic、abstract、inline、static - 类方法类型
原文:https://www.cnblogs.com/guorongtao/p/15146317.html