详测 Generics Collections TQueue (3): OnNotify、Extract

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure MyQueueNotify(Sender: TObject; const Item: Integer;
      Action: TCollectionNotification);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//uses Generics.Collections;

{准备给 TQueue.OnNotify 调用的事件过程}
procedure TForm1.MyQueueNotify(Sender: TObject; const Item: Integer;
  Action: TCollectionNotification);
begin
  case Action of
    cnAdded     : ShowMessageFmt('Add: %d', [Item]);
    cnRemoved   : ShowMessageFmt('Remove: %d', [Item]);
    cnExtracted : ShowMessageFmt('Extract: %d', [Item]);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Queue: TQueue<Integer>;
begin
  Queue := TQueue<Integer>.Create();
  Queue.OnNotify := MyQueueNotify;

  Queue.Enqueue(11); {Add: 11}
  Queue.Enqueue(22); {Add: 22}
  Queue.Enqueue(33); {Add: 33}

  Queue.Dequeue;     {Remove: 11}

  // Extract 和 Dequeue 功能一致, 区别只是在驱动 OnNotify 事件时传递的参数有区别, 没多大意义
  Queue.Extract;     {Extract: 22}

  //Queue.OnNotify := nil;

  Queue.Free;        {Remove: 33}
end;

end.

 
 
 
 
 

 

 

  

转载于:https://my.oschina.net/hermer/blog/319810

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值