delphi 精要-读书笔记(过程类型,方法类型)

原创 2006年06月13日 20:24:00

下面是对两种数据类型的认识(过程类型,方法类型)

1.过程类型

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
type
    TOneFun=function(X:Integer):Integer;

function SomeFunction(X:Integer):Integer;
begin
   Result:=X*2
end;

function SomeCallBack(X:Integer;OneFun:TOneFun):Integer;  //这个相当于一个回调函数
begin
   Result:=OneFun(X);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   F:TOneFun;
   I,J:Integer;
begin
   F:=SomeFunction;
   I:=F(4);
   j:=SomeCallBack(4,F);
   if i=j then
     showmessage('F(4)和SomeCallBack功能相同');
     showmessage(inttostr(i));
     showmessage(inttostr(j));
end;

end.

2.方法类型

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure ShowInfo;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{
  方法指针可以用定义在System单元的一个记录描述
  type
    TMethod=record
    code,data :Pointer;

  它包含两个指针code和data,code可以看作是方法地址的指针,data可以看做是方法所属对
  象的指针
}

procedure TForm1.Button1Click(Sender: TObject);
type
   TMyProcedure=procedure of object;  //定义了一个方法类型
var
   OneProcedure:TMyProcedure;  //声明一个方法类型的变量
begin
   OneProcedure:=Form1.ShowInfo;  //给方法指针赋值
   {
    也可以这样给方法指针赋值
    TMethod(OneProcedure).code:=Form1.MethodAddress('showinfo');
    TMethod(OneProcedure).data:=Form1;
   }
   ShowMessage(TObject(TMethod(OneProcedure).Data).ClassName);
   OneProcedure;
end;

procedure TForm1.ShowInfo;
begin
   ShowMessage(Self.Name);
end;

end.

过程类型的变量是指向过程的指针,和回调函数差不多,方法类型的变量是指向方法的指针,写法上还比过程类型多了 of objects,方法类型的变量只能通过对象来引用

java编程思想读书笔记----第十四章 类型信息

运行时类型信息可以使你在程序运行时发现和使用类型信息。java有两种方式让我们在运行时识别对象和类的信息,一种是传统的RTTI,一种是“反射”机制,它允许我们在运行时发现和使用类的信息。...

《Effective Modern C++》读书笔记(4) -- 尽量使用auto来显式类型声明

写了三篇,发现还是有点啰嗦了,所以下面的笔记改的更为简洁些,更多的是记载自己对这本书的理解和运用。这节包括的内容有: auto std::function 前言在C或者C++这类语言中,声明变量的使用...
  • tutuxs
  • tutuxs
  • 2017年06月20日 21:08
  • 166

Object-C高级编程读书笔记(5)——Block的对象类型截取

在之前的博客中,我们探讨了Block对于普通类型数据的截取,其实现很简单,就是在Block对象中保存一份值拷贝。 那么,对于OC中的对象类型(包括系统自带类型NSArray,NSString和自定义...

C++ Primer读书笔记第14章:重载运算与类型转换

14.1基本概念重载的运算符是具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成。 重载运算符有以下几个要遵守的原则: 重载运算符函数的参数数量与该运算符作用的运算...

《大话数据结构》读书笔记之栈抽象数据类型(数组实现)

/* Name: 栈抽象数据类型(使用数组实现)  Copyright:  Author: 巧若拙  Date:13-09-14 18:28 Description:  */ #...

JavaScript高级程序设计读书笔记—— 基本数据类型

一、javaScript数据类型 5种基本数据类型 1. undefined 2. null 3. boolean 4. number 5. string 以及一种复杂数据类型  object ...

《C++ Primer》读书笔记-第二章 06 处理类型

作者:马志峰 链接:https://zhuanlan.zhihu.com/p/23430921 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 声明: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi 精要-读书笔记(过程类型,方法类型)
举报原因:
原因补充:

(最多只允许输入30个字)