delphi 关于 class helper for ... 语法


本文整理自网络,侵删。

 关于 class helper for ... 语法

class helper 可能是从 Delphi 2007 增加的新语法, 因为感觉不太实用, 直到今天才测试了一下.

试过之后才知道: 挺有意思的! 基本功能就是修改已存在的类.
--------------------------------------------------------------------------------


Txxx = class helper for T... {T... 表示已存在的类}
{可以替换已存在的方法}
{也可以有新的方法、成员}
end;

//这之后再使用 T... 类及其子孙类时, 都会优先使用 Txxx 的修改.
--------------------------------------------------------------------------------

例一:
--------------------------------------------------------------------------------

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

TMyClass = class
function func1: string;
function func2: string;
end;

TMyClassHelper = class helper for TMyClass
function func1: string; {将把 TMyClass 的同名方法替换掉}
function func3: string; {将为 TMyClass 及其子类增加这个方法}
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TMyClass }

function TMyClass.func1: string;
begin
Result := 'TMyClass.func1';
end;

function TMyClass.func2: string;
begin
Result := 'TMyClass.func2';
end;

{ TMyClassHelper }

function TMyClassHelper.func1: string;
begin
Result := 'TMyClassHelper.func1';
end;

function TMyClassHelper.func3: string;
begin
Result := 'TMyClassHelper.func3';
end;

//测试
procedure TForm1.Button1Click(Sender: TObject);
var
obj: TMyClass;
begin
obj := TMyClass.Create;

ShowMessage(obj.func1); {TMyClassHelper.func1}
ShowMessage(obj.func2); {TMyClass.func2}
ShowMessage(obj.func3); {TMyClassHelper.func3}

obj.Free;
end;

end.
--------------------------------------------------------------------------------

例二: 本例为 TControl 类增加了一个方法, 之后 TControl 及其所有子孙类就都拥有了这个方法.
--------------------------------------------------------------------------------

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

TMyClassHelper = class helper for TControl
procedure MyMsg;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TMyClassHelper }

procedure TMyClassHelper.MyMsg;
begin
ShowMessageFmt('%s 的类名是 %s', [Name,ClassName]);
end;

//测试: 这里测试了当前窗体和当前按钮, 它们都是从 TControl 继承来的
procedure TForm1.Button1Click(Sender: TObject);
begin
Self.MyMsg; {Form1 的类名是 TForm1}
TButton(Sender).MyMsg; {Button1 的类名是 TButton1}
end;

end.

相关阅读 >>

Delphi之如何快速开发原生activex控件

Delphi中使用goo.gl(google的缩短url服务)api

Delphi 用拼音首字符检索汉字的源代码

Delphi 安卓app的https访问权限

Delphi xe vcl - tlinklabel(链接标签)

print documents from Delphi - print pdf, doc, xls, html, rtf, docx, txt

Delphi 记录类型- 结构指针

判断url的有效性

Delphi tfont类型和json互相转换的函数

idtcpserver 用户掉线检测方法

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...