Delphi 如何销毁自定义组件阵列
我有一个自定义组件“Delphi 如何销毁自定义组件阵列,delphi,delphi-xe2,Delphi,Delphi Xe2,我有一个自定义组件“TCARD”的销毁过程。然后在运行时创建一个数组 Cards: array[1..20] of TCards 然后我做一些事情。。。 在程序结束时,我想销毁阵列中的所有TCARD。我该怎么做,还是必须每次都这样做 cards[1].destroy; cards[2].destroy; .... cards[20].destroy; 如果您使用TObjectList,这将为您完成,您只需销毁列表即可 Uses Generics.Collections, ... //
TCARD
”的销毁过程。然后在运行时创建一个数组
Cards: array[1..20] of TCards
然后我做一些事情。。。
在程序结束时,我想销毁阵列中的所有TCARD。我该怎么做,还是必须每次都这样做
cards[1].destroy;
cards[2].destroy;
....
cards[20].destroy;
如果您使用
TObjectList
,这将为您完成,您只需销毁列表即可
Uses
Generics.Collections,
...
// define your list
Cards: TObjectList<TCard>;
...
// create list
Cards := TObjectList<TCard>.Create;
try
// Create and add your card objects
ACard := TCard.Create;
Cards.Add(ACard);
// do something with Cards
...
// destroy cards - this will automatically free the objects owned by the list
finally
Cards.Free;
end;
如果您使用
TObjectList
,这将为您完成,您只需销毁列表即可
Uses
Generics.Collections,
...
// define your list
Cards: TObjectList<TCard>;
...
// create list
Cards := TObjectList<TCard>.Create;
try
// Create and add your card objects
ACard := TCard.Create;
Cards.Add(ACard);
// do something with Cards
...
// destroy cards - this will automatically free the objects owned by the list
finally
Cards.Free;
end;
停止对对象使用数组,并使用TObjectList。对象销毁由列表管理。尚未使用的TobjectList将查看它。。但是如果我使用它,我可以做一个TObjectlist.destroy?TObjectlist就是你需要的。但是你从来没有听说过for循环吗?说真的,如果你看不到那个解决方案,你就需要回到基本点上。@DavidHeffernan,我有过,但希望有一个Array.destroy之类的东西。而且我还是在基础上。。我发现当你自己教每一件事的时候,你并没有学到基础知识——按顺序前进。。我发现开始一个项目并付诸实践会教我更好。要做到这一点,你通常会使用一些基本的,甚至是一些高级的。。但也许我错了:在你可以使用的地方使用一些更高级别的容器,这样你就可以保护自己不受本质的影响。停止对对象使用数组,使用TObjectList。对象销毁由列表管理。尚未使用的TobjectList将查看它。。但是如果我使用它,我可以做一个TObjectlist.destroy?TObjectlist就是你需要的。但是你从来没有听说过for循环吗?说真的,如果你看不到那个解决方案,你就需要回到基本点上。@DavidHeffernan,我有过,但希望有一个Array.destroy之类的东西。而且我还是在基础上。。我发现当你自己教每一件事的时候,你并没有学到基础知识——按顺序前进。。我发现开始一个项目并付诸实践会教我更好。要做到这一点,你通常会使用一些基本的,甚至是一些高级的。。但也许我错了:使用一些更高层次的容器,这样你就可以保护自己不受本质的影响。目前我有例如
cards[i].Cname:=adoquery1.FieldByName('Name').AsString代码>我假设我仍然可以这样做抱歉,我还没有搜索,只是仍然更改代码是的,你可以像普通数组一样循环它们:)推它,我知道,但一旦对象在列表中。我编辑列表中的对象。然后我必须使原始对象=列表中的项目正确吗?或者列表中的对象是否直接影响原始对象?如果这是我理解的另一个问题,对象独立存在,它不知道它在列表或数组中。objectlist只是一个容器。例如:MyObject:=MyList[i];MyObject.field:=1
与MyList[i]相同。字段:=1
。这是同一个物体,明白吗?他们用卡片做些事情。目前我有例如cards[i].Cname:=adoquery1.FieldByName('Name').AsString代码>我假设我仍然可以这样做抱歉,我还没有搜索,只是仍然更改代码是的,你可以像普通数组一样循环它们:)推它,我知道,但一旦对象在列表中。我编辑列表中的对象。然后我必须使原始对象=列表中的项目正确吗?或者列表中的对象是否直接影响原始对象?如果这是我理解的另一个问题,对象独立存在,它不知道它在列表或数组中。objectlist只是一个容器。例如:MyObject:=MyList[i];MyObject.field:=1
与MyList[i]相同。字段:=1
。这是同一个物体,明白吗?
procedure FreeCards(Cards : TCards);
var
Card : TCard;
begin
For Card in Cards do
Card.Free;
end;