在越写越多,越写越复杂的代码过程中
越来越经常看到如下写法
TOnCreateJobThreadEvent = function: TJobWorkerThread of object;
TOnProcessJobEvent = procedure( FClientContext: TDIClientContext;
FJobWorkerThread: TJobWorkerThread;
FSignEvnet: Integer ) of object;
说实在的,我很晕,真的
我们过去写函数,写方法都是如下写法
procedure MyProc();
begin
end;
function MyFunc():boolean;
begin
end;
可上面在前面竟然加了一个TXXX,而在Delphi定义里面,我们知道以T开头的大部分为类声明
这个该死的四不像到底是什么东西,我要如何理解
问了很多人,都是知道他是怎么回事,但是解释不清楚,我日日日!
于是我晕到今天,今天实在气不过,搜索delphi of object
竟然让我真的找到答案了,原来这种写法叫方法类型,为一种特殊的类型,可当变量使用
以前我们知道的类型都是如下定义
Type
TMyTest = class
x:integer;
end;
这种通常可称为结构类型,而以下这种则称为方法类型
TOnProcessJobEvent = procedure( FClientContext: TDIClientContext;
FJobWorkerThread: TJobWorkerThread;
FSignEvnet: Integer ) of object;
意思大概可理解为,TOnProcessJobEvent该类型指向一个方法,前提是你的参数应该相同,跟重载不同
----------------------------------------------------------------
举个例子(http://topic.csdn.net/t/20060912/09/5015133.html)
procedure TForm1.BBB(I: Integer);
begin
showmessage( 'BBB: ' + IntToStr(I));
end;
procedure TForm1.CCC(I: Integer);
begin
showmessage( 'CCC: ' + IntToStr(I));
end;
procedure TForm1.Button1Click(Sender: TObject);
type
Taaa = procedure (i:integer) of object ;//方法类型
var
ap: Taaa;
begin
ap := BBB;
ap(1);
ap := CCC;
ap(2);
end;
--------------------------------------------------------------
方法类型,也就是一种类型,蛮特殊的。。。可以当变量来用...
楼上的例子应该讲得非常的清楚了...我加点注释吧...呵呵
procedure TForm1.Button1Click(Sender: TObject);
type
Taaa = procedure (i:integer) of object ;
var
ap: Taaa;
begin
ap := BBB; //这里把BBB这个方法赋给ap这个变量,注意BBB与ap的声明原型要一样,不然会有错的。。。
ap(1); //这里实际调用的就是BBB了。。。
end;