关于类的方法(不是类方法),类方法指针
关于类的方法:
(不是类方法,这里指object
pascal中的静态方法,相当于C++的成员函数)
1:
带有隐含参数 self
2: 方法是方法,数据是数据。
3:Delphi的方法是一个结构
type
TMethod
= record
Code:
Pointer;
//方法的入口地址
Data:
Pointer;
//类实例指针(Self参数)
end;
我们调用类的方法,其实分为2个部分,
1:调用方法的代码,通过类来获得方法入口地址。
2:访问对象的数据(也可能不访问),通过类的方法的那个隐含参数Self来访问。
我做了一个测试:
TMyObject
= class
private
FName: string;
public
procedure
ChangeName(AName:
string);
procedure ShowPrivate;
end;
procedure
TMyObject.ChangeName(AName:
string);
begin
FName
:=
AName; //修改私有变量
ShowMessage(
'My
name
is
to
be
changed
to
'
+ AName);
end;
procedure
TMyObject.ShowPrivate;
begin
ShowMessage(
'My
name
is
'
+ FName);
end;
procedure
TForm1.Button1Click(Sender:
TObject);
type
TCallFun
=
procedure(AName:
string)
of object;
var
E: TMyObject;
M: TMethod;
begin
E
:= TMyObject.Create;
M.Code
:=
@TMyObject.ChangeName;