首页 > 其他分享 >关于 class helper for ... 语法

关于 class helper for ... 语法

时间:2023-05-06 15:35:44浏览次数:33  
标签:... func1 end string helper TMyClassHelper TMyClass class

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.

标签:...,func1,end,string,helper,TMyClassHelper,TMyClass,class
From: https://www.cnblogs.com/lucken2000/p/17377483.html

相关文章

  • 潮起潮落 错误"控件包含代码块(即 <% ... %>),因此无法修改控件集合"的原因和解决方法
    https://www.cnblogs.com/luointer123/archive/2009/12/21/1628894.html如以下的调用方法,可能出现错误:控件包含代码块(即<%...%>),因此无法修改控件集合后台C#代码:     publicstringtest()     {          return"test";      }前台J......
  • 展开运算符(...)
    作用:如果不知道形参有多少个,可以...functionsan(a,b,c,d){  returna+b*c-d}functioncurry(func,...aaa){  returnfunction(...bbb){    returnfunc(...aaa,...bbb)  }}//constnewSan=curry(san,1,2)console.log(newSan(3,4))//3consol......
  • Error creating bean with name ‘dataSource‘ defined in class path resource解决
    原因是导入了jdbc的依赖,使用@Configuration注解向spring注入了dataSourcebean。但是因为工程中没有关于dataSource相关的配置信息,当spring创建dataSourcebean因缺少相关的信息就会报错。有两个办法:办法1:去除spring-boot-starter-jdbc的依赖或者mybatis的依赖办法2:在Sprin......
  • 2023-05-05:给定一个无向、连通的树 树中有 n 个标记为 0...n-1 的节点以及 n-1 条边
    2023-05-05:给定一个无向、连通的树树中有n个标记为0...n-1的节点以及n-1条边。给定整数n和数组edges,edges[i]=[ai,bi]表示树中的节点ai和bi之间有一条边。返回长度为n的数组answer,其中answer[i]:树中第i个节点与所有其他节点之间的距离之和。输入......
  • 太为难我了,阿里面试了7轮...
    前言今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个“五年计划”截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了。但是,不得不说,这次阿里面试真的太难为我了,可以说是和面试官大战了7个回合,不过好在最后给了offer。......
  • Jenkins 执行Docker build错误Got permission denied while trying to connect to the
    问题: 解决方法:这个报错为权限问题1.把jenkins用户,加到docker用户组 #如果没有docker用户组,先创建用户组:groupadddocker#添加jenkins用户到用户组:sudousermod-a-Gdockerjenkins-a<追加>必须与-G选项一起使用,把用户追加到某些组中。-G<群组>修改用户所属的......
  • 关于Class.forName(className).newInstance()介绍
    Class.forName(xxx.xx.xx) 返回的是一个类首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new 不一样,要分清楚)。 至于什么时候用,你可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?只有你提到的这个方......
  • 3个月,从功能测试进阶到自动化测试涨薪10k,我悟了....
    ​因为我最近在分享自动化测试技术,经常被问到:功能测试想转自动化,请问应该怎么入手?有没有好的资源推荐?那么,接下来我就结合自己的经历聊一聊我是如何在工作中做自动化测试的。(学习路线和网盘资源放在文末了)3个月是怎么从功能测试进阶到自动化测试并且涨薪呢?今天我们就来聊一聊一......
  • Exploiting Cloze Questions for Few Shot Text Classification and Natural Language
    ExploitingClozeQuestionsforFewShotTextClassificationandNaturalLanguageInference  论文全程及链接:《ExploitingClozeQuestionsforFewShotTextClassificationandNaturalLanguageInferenceTimo》项目地址:https://github.com/timoschick/pet  ......
  • npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path C:\Program Files\node
    npm项目初始化代码npminit--yesidea代码安装npmnpmiexperss我输入的时候报错了,如下图所示没关系,只需要手动打开C盘的路径文件找到这个文件,并且把他Ctrl+D删除掉即可之后在运行这串代码就可以啦明显成功了......