zoukankan      html  css  js  c++  java
  • 关于类的方法(不是类方法),类方法指针

    关于类的方法(不是类方法),类方法指针
    关于类的方法:   (不是类方法,这里指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;
  • 相关阅读:
    Android中TextView设置下划线
    BottomSheetDialogFragment 如何设置高度和禁止滑动(Kotlin)
    [iOS]使用GCD创建定时器
    [iOS]定时器NSTimer、CADisplayLink的内存管理
    [iOS]dispatch_after()中self和weakself的使用
    [Flutter]在Mac上安装Flutter运行环境
    wx小程序反编译为js代码
    Android | 玩转AppBarLayout,设置scrollFlags滑动属性详解
    玩转微信 | 炫酷的聊天满屏掉爱心系列,赶紧收藏
    Android使用更简单的方式实现滑块拼图验证码功能
  • 原文地址:https://www.cnblogs.com/luckForever/p/7255116.html
Copyright © 2011-2022 走看看