procedure .... of object(100分)

  • 主题发起人 主题发起人 kevincsg
  • 开始时间 开始时间
K

kevincsg

Unregistered / Unconfirmed
GUEST, unregistred user!
请问与普通的procedure有什么不同?
 
The last example uses object subtyping to define reusable queues. First the interface:

TYPE
Queue = RECORD head, tail: QueueElem END;
QueueElem = OBJECT link: QueueElem END;

PROCEDURE Insert (VAR q: Queue
x: QueueElem);
PROCEDURE Delete (VAR q: Queue): QueueElem;
PROCEDURE Clear (VAR q: Queue);

Then an example client:

TYPE
IntQueueElem = QueueElem OBJECT val: INTEGER END;
VAR
q: Queue;
x: IntQueueElem;
...
Clear(q);
x := NEW(IntQueueElem, val := 6);
Insert(q, x);
...
x := Delete(q)
 
是方法指针,指向对象的方法时就要用这种类型
你可以看一下Delphi的帮助,说得很详细的
查找“of object (method pointers),”
 
procedure of object 是指某一对象的方法

普通的procedure是指一个过程(子程序)
 
谢谢两位,我知道此种形式是方法指针,但帮助上还说,
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.
此不等于在类中写方法,不是一样是吗,请各位指教!
 
procedure .... of object 是方法指针
来看方法的定义
TMethod = record
Code, Data: Pointer;
end;
它包含Code:代码指针,Data:数据指针,其实Code指向函数体本身,Data指向所属的类

这样不同的类可以调用统一个方法,但Data指向的类不同,Code执行效果也不同-对不同的
类操作,例如“事件”Event就是这样做的
 
比如你要声明一个变量来保存Button1.OnClick
你就应该这样声明(不用现成的TNotifyEvent情况下)
var
Button1Click: procedure(Sender: TObject) of object;
而不能是
Button1Click: procedure(Sender: TObject);
因为前者才是方法指针。
 
就是你在设计时双击按钮出来的那个事件!
 
多人接受答案了。
 
后退
顶部