关于 class helper for ... 语法
16lz
2021-05-01
关于 class helper for ... 语法
class helper 可能是从 Delphi 2007 增加的新语法, 因为感觉不太实用, 直到今天才测试了一下.
试过之后才知道: 挺有意思的! 基本功能就是修改已存在的类.
Txxx = class helper for T... {T... 表示已存在的类} {可以替换已存在的方法} {也可以有新的方法、成员}end;//这之后再使用 T... 类及其子孙类时, 都会优先使用 Txxx 的修改.
例一:
unit Unit1;interfaceuses 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;interfaceuses 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.posted on 2009-10-13 21:33 万一 阅读(8453) 评论(14) 编辑 收藏©著作权归作者所有:来自51CTO博客作者JLee79的原创作品,如需转载,请注明出处,否则将追究法律责任
更多相关文章
- 将字符串转换成 UTF8 编码的函数
- 学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、B
- 学用 ASP.Net 之 "字符串" (4): string 类的扩展方法
- 学用 ASP.Net 之 "字符串" (3): string 类的非扩展方法
- 使用 IntraWeb (37) - TIWApplication
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找
- jQuery中的$.ajax方法,以及基本的vue指令操作
- 重新理解广义SD-WAN——当下解决网络发展的方法论哲学