詳細Generics Collections:TObjectList、TObjectQueue、TObjectStack

1685 ワード

TObjectList、TObjectQueue、TObjectStackはそれぞれ次のように継承されます.
TList、TQueue、TStack;
オブジェクトに特化したリストで、オブジェクトが自動的に解放されるかどうかを決定するOwnsObjectsブール属性が追加されています(これもCreateのパラメータによって決定されます).
その他は基本的にそれらの親と同じであり、TObjectListテストの一例のみを与える(この汎用関連コンテンツの学習が完了する):
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Generics.Collections;

procedure TForm1.Button1Click(Sender: TObject);
const
  w = 100; h = 20;
var
  ObjList: TObjectList<TEdit>;
  Edit: TEdit;
  i: Integer;
begin
  ObjList := TObjectList<TEdit>.Create();
  //ObjList := TObjectList<TEdit>.Create(False); { ,  }
  
  Randomize;
  for i := 0 to 5 do {  6   Edit,  }
  begin
    Edit := TEdit.Create(Self);
    Edit.Parent := Self;
    Edit.SetBounds(Random(ClientWidth-w), Random(ClientHeight-h), w, h);
    ObjList.Add(Edit);
  end;

  {2  }
  Sleep(2000);
  ObjList.Delete(0);

  {2  ,  ;  }
  Sleep(2000);
  Edit := ObjList.Extract(ObjList[0]);
  Edit.Color := clRed;
  Edit.Repaint;

  //ObjList.OwnsObjects := False; { ,  }

  {2  ;  }
  Sleep(2000);
  ObjList.Free;
end;

end.