这种定义什么意思?

chenquan 2003-03-04 10:10:45
那位高手介绍一下,下面句子什么意思?
如 type
TonError=procedure(xx:String) of object;
怎么调用,最好有些详细点代码,谢谢哈

...全文
35 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
蝈蝈太阳 2003-03-04
  • 打赏
  • 举报
回复
TonError:=@strtoint;
纠正一下书写错误,不好意思,^_^
蝈蝈太阳 2003-03-04
  • 打赏
  • 举报
回复
type
TonError=procedure(xx:String) of object

TonError是个过程指针,可以指向的过程类型是输入参数为单一String的过程。
就是这么简单;定义之后TonError就可以当成任意合乎上面解释的过程来使用,
但是要有这个赋值操作在先:TonError:=@strtoint('154')作为一个示例。
slley 2003-03-04
  • 打赏
  • 举报
回复
up
chenquan 2003-03-04
  • 打赏
  • 举报
回复
谢谢
fancier 2003-03-04
  • 打赏
  • 举报
回复
定义方法指针
fancier 2003-03-04
  • 打赏
  • 举报
回复
Delphi帮助
Procedural types allow you to treat procedures and functions as values that can be assigned to variables or passed to other procedures and functions. For example, suppose you define a function called Calc that takes two integer parameters and returns an integer:

function Calc(X,Y: Integer): Integer;

You can assign the Calc function to the variable F:

var F: function(X,Y: Integer): Integer;

F := Calc;

If you take any procedure or function heading and remove the identifier after the word procedure or function, what抯 left is the name of a procedural type. You can use such type names directly in variable declarations (as in the example above) or to declare new types:

type

TIntegerFunction = function: Integer;
TProcedure = procedure;
TStrProc = procedure(const S: string);
TMathFunc = function(X: Double): Double;
var
F: TIntegerFunction; { F is a parameterless function that returns an integer }
Proc: TProcedure; { Proc is a parameterless procedure }
SP: TStrProc; { SP is a procedure that takes a string parameter }
M: TMathFunc; { M is a function that takes a Double (real) parameter

and returns a Double }
procedure FuncProc(P: TIntegerFunction); { FuncProc is a procedure whose only parameter
is a parameterless integer-valued function }

The variables above are all procedure pointers梩hat is, pointers to the address of a procedure or function. If you want to reference a method of an instance object (see Classes and objects), you need to add the words of object to the procedural type name. For example

type

TMethod = procedure of object;
TNotifyEvent = procedure(Sender: TObject) of object;

These types represent method pointers. A method pointer is really a pair of pointers; the first stores the address of a method, and the second stores a reference to the object the method belongs to. Given the declarations

type

TNotifyEvent = procedure(Sender: TObject) of object;
TMainForm = class(TForm)
procedure ButtonClick(Sender: TObject);
...
end;
var
MainForm: TMainForm;
OnClick: TNotifyEvent

we could make the following assignment.

OnClick := MainForm.ButtonClick;

Two procedural types are compatible if they have

the same calling convention,
the same return value (or no return value), and
the same number of parameters, with identically typed parameters in corresponding positions. (Parameter names do not matter.)

Procedure pointer types are always incompatible with method pointer types. The value nil can be assigned to any procedural type.
Nested procedures and functions (routines declared within other routines) cannot be used as procedural values, nor can predefined procedures and functions. If you want to use a predefined routine like Length as a procedural value, write a wrapper for it:

function FLength(S: string): Integer;

begin
Result := Length(S);
end;

Procedural types in statements and expressions
chenquan 2003-03-04
  • 打赏
  • 举报
回复
喂,帮帮忙嘛

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧