关于类的方法(不是类方法),类方法指针

关于类的方法(不是类方法),类方法指针
关于类的方法:   (不是类方法,这里指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
     :=   TMyObject.Create;
    M.Code   :=   @TMyObject.ChangeName;   //这里设置要访问的方法的入口地址
    M.Data   :=   @Pointer(E)^;       //设置Self参数,即类实例指针
    TCallFun(M)( 'Xbl ');
    E.ShowPrivate;     //My   name   is   Xbl
    E.Free;
end;
posted @ 2013-04-19 10:28  Wishmeluck  阅读(216)  评论(0编辑  收藏  举报