我制作了一个用泛型进行一些测试的程序。它看起来像这样:
基本上,您可以使用下面的2个按钮添加按钮或编辑,它们将显示当前日期。我没有为按钮和编辑创建两个不同的类,而是认为我可以创建一个这样的泛型类:
type
TGeneric<T: class, constructor> = class(TObject)
private
item: T;
date: TDateTime;
function getTime: string;
public
constructor Create;
destructor Destroy; override;
procedure showLife(Sender: TObject);
property time: string read getTime;
property myObj: T read item write item;
end;
implementation
{ TGeneric<T> }
constructor TGeneric<T>.Create;
begin
inherited;
date := Now;
end;
destructor TGeneric<T>.Destroy;
begin
inherited Destroy;
end;
function TGeneric<T>.getTime: string;
begin
Result := FormatDateTime('c', date);
end;
上面的类名为UnitGeneric。我有另一个名为Unit1的单元,它包含这个实现:
procedure TForm3.Button1Click(Sender: TObject);
var a: TGeneric<TButton>;
begin
a := TGeneric<TButton>.Create;
try
a.myObj := TButton.Create(Self);
a.myObj.Parent := Self;
a.myObj.SetBounds(aLeft, aTop, 200, 35);
a.myObj.Caption := a.time;
setTop(40);
finally
a.Free;
end;
end;
procedure TForm3.Button2Click(Sender: TObject);
var a: TGeneric<TEdit>;
begin
a := TGeneric<TEdit>.Create;
try
a.myObj := TEdit.Create(Self);
a.myObj.Parent := Self;
a.myObj.SetBounds(aLeft, aTop, 200, 35);
a.myObj.Text := a.time;
setTop(40);
finally
a.Free;
end;
end;
我有两个主要问题:
我是否以正确的方式创建组件(TEdits和TButton)?正如您所看到的,我在泛型类中声明了一个可以使用该属性访问的item: T
变量。然后我直接在表单中管理对象的创建等。在其他地方(可能在泛型类的构造函数中)执行它会更好吗?
我知道当我为某个组件设置所有者时,&#34;父亲&#34;将摧毁所有的孩子。根据这个原因,如果我按照上面的方法创建一个对象(TEdit或TButton)并尝试使用try-finally,它是否安全?
注意:在1
我特别要问这是否是管理Generic类中对象的正确方法