转载于万一的博客https://www.cnblogs.com/del/archive/2009/10/13/1582789.html

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.

 菜根大神的方法

type
TMyObject = class
private
FX : Integer;
public
property X: Integer read FX write FX;
end; type
TMyObjectHelper = class helper for TMyObject
type
PMyObjHelperData = ^TMyObjHelperData;
TMyObjHelperData = record
public
FY: Integer;
end;
private
class constructor Create;
public
function GetData: PMyObjHelperData;
function GetXYValue : Integer;
procedure SetY(Y: Integer);
end; class constructor TMyObjectHelper.Create;
var
P: Pointer;
ASize: Integer;
T: NativeUInt;
begin
P := PByte(TMyObject) + vmtInstanceSize;
ReadProcessMemory(GetCurrentProcess, P, @ASize, SizeOf(ASize), T);
Inc(ASize, SizeOf(TMyObjHelperData));
WriteProcessMemory(GetCurrentProcess, P, @ASize, SizeOf(ASize), T);
end; function TMyObjectHelper.GetData: PMyObjHelperData;
begin
Result :=
Pointer(PByte(Self) + InstanceSize - hfFieldSize + hfMonitorOffset - SizeOf(TMyObjHelperData));
end; function TMyObjectHelper.GetXYValue : Integer;
var
AData: PMyObjHelperData;
begin
AData := GetData;
Result:= FX + AData.FY;
end; procedure TMyObjectHelper.SetY(Y: Integer);
var
AData: PMyObjHelperData;
begin
AData := GetData;
AData.FY := Y;
end; procedure TForm1.Button5Click(Sender: TObject);
var
AObj: TMyObject;
begin
AObj := TMyObject.Create;
AObj.X := 200;
AObj.SetY(100);
ShowMessage(AObj.GetXYValue.ToString);
AObj.Free;
end;

  

关于 class helper for ... 语法的更多相关文章

  1. Razor语法大全

    本文页面来源地址:http://www.cnblogs.com/dengxinglin/p/3352078.html Razor是基于framewor4以上写的一个开源项目:https://githu ...

  2. Razor语法大全(转)

    Razor语法大全 因为最近在看mvc的时候在学习Razor的发现了这个不错的博文,故转之. 本文页面来源地址:http://www.cnblogs.com/dengxinglin/p/3352078 ...

  3. mvc 4 Razor (@html.xx)语法大全以及应用

    Razor语法大全  @Html ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction差别 对这 ...

  4. 【Razor语法规则小手册....】

    在经过长达半年的Windows开发后,Razor的一些语法有些生疏了.搜集些,再熟悉下.呵呵,甚是怀念以前做web 项目的时候,基于动软代码生成器自定义T4模板,后来vs2010后开始支持T4模板. ...

  5. MVC+EF Core 完整教程20--tag helper详解

    之前我们有一篇:“动态生成多级菜单”,对使用Html Helper做了详细讲述,并且自定义了一个菜单的 Html Helper: https://www.cnblogs.com/miro/p/5541 ...

  6. Razor标记语言介绍

    什么是Razor?   Razor的中文意思是"剃刀",它不是编程语言,只是一种服务器段的标记语言,与PHP和ASP类似   Razor允许你向网页中嵌入基于服务器的代码(Visu ...

  7. ASP.NET MVC 3和Razor中的@helper 语法

    原文:http://kb.cnblogs.com/page/102191/ ASP.NET MVC 3支持一项名为"Razor"的新视图引擎选项(除了继续支持/加强现有的.aspx ...

  8. delphi xe3的helper语法 good

    在C#中有一个很有用的helper保留字,它可以让我们对已有的类添加额外功能,当时就在想delphi有这个保留字就好了,这样许多控件就不需要继承重写了.后来delphi 果然有了这个语法,到delph ...

  9. (转)ASP.NET MVC 3和Razor中的@helper 语法

    转自:http://kb.cnblogs.com/page/102191/ ASP.NET MVC 3支持一项名为“Razor”的新视图引擎选项(除了继续支持/加强现有的.aspx视图引擎外).当编写 ...

随机推荐

  1. 数组也继承了Object类

    C++ 最根上的类有好多,也可以随便地定义.

  2. DevOps 发展融合运维可视化

    DevOps,是开发(Development)和运维(Operations)的组合,代表一种文化.运动或实践,旨在促进软件交付和基础设施变更软件开发人员(Dev)和 IT 运维技术人员(Ops)之间的 ...

  3. JQuery-学习。

    jQuery是一套跨浏览器的JavaScript库,简化HTML与JavaScript之间的操作.由约翰·雷西格(John Resig)在2006年1月的BarCamp NYC上发布第一个版本.目前是 ...

  4. Oracle EBS 更改物料说明后,在MTL_SYSTEM_ITEMS_B表中无变化

    需要再中文和英文环境同时修改: 程序里,可以通过初始session语言环境来解决.

  5. UITableView中cell里的UITextField不被弹出键盘挡住

    UITableView中cell里的UITextField不被弹出键盘挡住 本人视频教程系类   iOS中CALayer的使用 效果如下: 源码: EditCell.h 与 EditCell.m // ...

  6. php常用算法和数据结构

    </pre><pre name="code" class="php"><?php /** * Created by PhpStor ...

  7. AT89S52汇编实现l通过按键中断切换led灯的四种闪烁模式(单灯左移,单灯右移,双灯左移,双灯右移)

    ;通过P1口控制8路LED的四种闪烁模式,单独LED灯左移,单独LED灯右移,相邻两个灯左移,相邻两个灯右移;通过一个外部中断0来检测按键的跳变沿来切换闪烁模式,第一次按键按下弹起,灯的闪烁状态由单独 ...

  8. SOA面向服务架构——SOA的概念

    SOA的概念是Gartner 在1996年提出来的,并于2002年12月进一步提出SOA是“现代应用开发领域最重要的课题”.   一.SOA的定义 SOA分为广义的SOA和狭义的SOA,广义的SOA是 ...

  9. 什么是SEO服务,企业为什么要做SEO?

    SEO服务: 1. 网站提交服务 网站提交是非常重要的,尤其是英文网站(英文网站可以提交到世界各国比较出色的搜索引擎).网站的提交,增加了潜在客户找到网站的机会.网站的提交是一个不断更新的过程,因为搜 ...

  10. Spring MVC Interceptor

    1 在spring-servlet.xml中进行如下配置 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path=& ...