关于 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的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 将字符串转换成 UTF8 编码的函数
  2. 学 Win32 汇编[23] - 位测试与位扫描指令: BT、BTC、BTR、BTS、B
  3. 学用 ASP.Net 之 "字符串" (4): string 类的扩展方法
  4. 学用 ASP.Net 之 "字符串" (3): string 类的非扩展方法
  5. 使用 IntraWeb (37) - TIWApplication
  6. Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数
  7. Delphi 正则表达式之TPerlRegEx 类的属性与方法(1): 查找
  8. jQuery中的$.ajax方法,以及基本的vue指令操作
  9. 重新理解广义SD-WAN——当下解决网络发展的方法论哲学

随机推荐

  1. Android进程的so注入--Poison(稳定注入版)
  2. 想抢先体验Android操作系统的魅力吗?那就
  3. Android设计(起步篇)
  4. Android的AIDL机制
  5. Android和设计模式:享元模式
  6. Android 自定义组合控件
  7. Android中webview拨打加载网页中的电话超
  8. Android(安卓)压缩工具类
  9. Android调用WebService系列之封装能力
  10. Android与Js通信之JsBridge再封装