Delphi中的匿名方法

Delphi及C++ Builder中底层的匿名方法及泛型

目录

Delphi及C++ Builder中底层的匿名方法及泛型

1、System.SysUtils

2、System.Classes

3、System

本客户相关博文,喜欢的就点个赞,鼓励我的原创技术写作:


        在js的世界里,基本就是大量的“回调”和“异步”函数,剩下的就是按照顺序执行的javascript代码,所以总的来说,js中无“同步模型”。正是因为如此,javascript在运行时没有“多余的”线程,它们都在同一个“线程”中工作。

       比如,任何第三方平台,凡是其API-Proxy代理服务器向你“代理转发(重定向)URL”,其响应结果,要么你在浏览器的导航器的地址栏中去取(Navigator.Location),要么你在响应头的redirect参数中去取,它们,都是异步的。

       Delphi及C++ Builder中,可以在发http请求时,传入一个“泛型的匿名方法”或“匿名的事件处理函数”的回调方法,在线程的“同步函数”中,调用该“回调”方法。得到“异步请求”的结果,并用此回调方法对该结果进行处理。

       Delphi及C++ Builder的世界里,有太多太多的处理机制,底层的构造,罗列如下,以期在不同的应用场景,进行灵活使用:

1、System.SysUtils

通用的匿名方法的定义描述类型:

// Generic Anonymous method declarations
type

  // 匿名方法:
  TProc = reference to procedure;
  TProc = reference to procedure (Arg1: T);
  TProc = reference to procedure (Arg1: T1; Arg2: T2);
  TProc = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3);
  TProc = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3; Arg4: T4);

  // 匿名函数:

  TFunc = reference to function: TResult;
  TFunc = reference to function (Arg1: T): TResult;
  TFunc = reference to function (Arg1: T1; Arg2: T2): TResult;
  TFunc = reference to function (Arg1: T1; Arg2: T2; Arg3: T3): TResult;
  TFunc = reference to function (Arg1: T1; Arg2: T2; Arg3: T3; Arg4: T4): TResult;

  // 匿名断言:

  TPredicate = reference to function (Arg1: T): Boolean;

通用方法指针:

/* Generic procedure pointer */

  TProcedure = procedure;

2、System.Classes

标准事件类型:

/* Standard events */
type
  TNotifyEvent = procedure(Sender: TObject) of object;
  TGetStrProc = procedure(const S: string) of object;

我加的,自定义事件类型的描述模型:

  TCustomizeEvent = procedure(const aString:string; aClassObject:TObject) of Object;

// 比如,线程类中的带类事件标识字符串、类的参数的事件类型

// 另:除这两个参数以外,还可以有N个泛型参数

带线程(线程ID、事件或强制队列处理、线程方法及过程)的匿名方法:

TOnSynchronizeProc = reference to procedure (AThreadID: TThreadID; var AQueueEvent: Boolean; var AForceQueue: Boolean; var AMethod: TThreadMethod; var AProcedure: TThreadProcedure); 

线程结构体(记录)及其指针的描述模型:

type
    PSynchronizeRecord = ^TSynchronizeRecord;
    TSynchronizeRecord = record
      FThread: TObject;
      FMethod: TThreadMethod;
      FProcedure: TThreadProcedure;
      FSynchronizeException: TObject;
      FExecuteAfterTimestamp: Int64;
      procedure Init(AThread: TObject; const AMethod: TThreadMethod); overload;
      procedure Init(AThread: TObject; const AProcedure: TThreadProcedure); overload;
    end;

任意线程(包括主线程、子线程、嵌套的线程)或类的方法:

/* TThread */

线程或类的匿名(的隐形)事件:

  TThreadMethod = procedure of object; // 隐式地包含了aClassObject:TObject事件参数

线程中的匿名方法或类中的匿名方法(的指针):

  TThreadProcedure = reference to procedure;

3、System

方法类型的通用指针记录(以指针为字段的结构体)及其指针:


  PMethod = ^TMethod;
  TMethod = record
    Code, Data: Pointer;
  public
    class operator Equal(const Left, Right: TMethod): Boolean; inline;
    class operator NotEqual(const Left, Right: TMethod): Boolean; inline;
    class operator GreaterThan(const Left, Right: TMethod): Boolean; inline;
    class operator GreaterThanOrEqual(const Left, Right: TMethod): Boolean; inline;
    class operator LessThan(const Left, Right: TMethod): Boolean; inline;
    class operator LessThanOrEqual(const Left, Right: TMethod): Boolean; inline;
  end; 

泛型的动态数组 :

TArray = array of T;

枚举及泛型枚举接口及其泛型比较接口的描述模型:


  IEnumerator = interface(IInterface)
    function GetCurrent: TObject;
    function MoveNext: Boolean;
    procedure Reset;
    property Current: TObject read GetCurrent;
  end;

  IEnumerable = interface(IInterface)
    function GetEnumerator: IEnumerator;
  end;

  IEnumerator = interface(IEnumerator)
    [HPPGEN('virtual T __fastcall GetCurrentT(void) = 0')]
    function GetCurrent: T;
    [HPPGEN('__property T Current = {read=GetCurrentT}')]
    property Current: T read GetCurrent;
  end;

  IEnumerable = interface(IEnumerable)
    [HPPGEN('virtual System::DelphiInterface > __fastcall GetEnumeratorT(void) = 0')]
    function GetEnumerator: IEnumerator;
  end;

  IComparable = interface(IInterface)
    function CompareTo(Obj: TObject): Integer;
  end;

  IComparable = interface(IComparable)
    function CompareTo(Value: T): Integer;
  end;

  IEquatable = interface(IInterface)
    function Equals(Value: T): Boolean;
  end;
 

New一个任意(结构体的)指针:

var
  SyncProc: TSyncProc;         // : record
  SyncProcPtr: PSyncProc;    // : ^SyncProc

New(SyncProcPtr)

本客户相关博文,喜欢的就点个赞,鼓励我的原创技术写作:

1.《软件的基本是要处理好”算法“及其基础(一)流-字-字符(包括某个数字、字母、符号和某个汉字等)-字符串-字节动态数组-字节-整数之间的转化关系和算法》

2.《软件的基本是要处理好”算法“及其基础(二)delphi系统原子函数及方法》

3.《软件的基本是要处理好”算法“及其基础(三)delphi 10.4.1字符串工具单元及其函数》

4.《时间、计时相关方法之 -软件的基本是要处理好”算法“及其基础(四)》

5、《delphi异步与javascript》 ​​​​​​​

你可能感兴趣的:(Delphi匿名方法及泛型,C++中底层的匿名方法及泛型,匿名方法及泛型,AnonymousMethod,AnonymousFuc)