我有一個自定義組件'TCARD
'的銷燬過程。然後在運行時我創建一個數組如何銷燬自定義組件的數組
Cards: array[1..20] of TCards
然後我做一些事情...... 和程序結束時,我想摧毀陣列中的所有TCards。我如何做到這一點,或者我必須每次都這樣做。
cards[1].destroy;
cards[2].destroy;
....
cards[20].destroy;
我有一個自定義組件'TCARD
'的銷燬過程。然後在運行時我創建一個數組如何銷燬自定義組件的數組
Cards: array[1..20] of TCards
然後我做一些事情...... 和程序結束時,我想摧毀陣列中的所有TCards。我如何做到這一點,或者我必須每次都這樣做。
cards[1].destroy;
cards[2].destroy;
....
cards[20].destroy;
如果您使用TObjectList<T>
,這將爲您完成,您所需要做的就是銷燬該列表。
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;
作爲一個額外的獎勵,你可以使自己的自定義對象,並添加卡相關的功能。
type
TMyCardList = class(TObjectList<TCard>)
public
// add needed behaviours
function FindHighestCardBySuit(ASuit : TSuit) : TCard;
procedure Shuffle;
// etc ...
end;
如果由於某種原因你不想使用TObjectList
,您可以自由使用一個簡單的循環中的對象:使用數組的對象
procedure FreeCards(Cards : TCards);
var
Card : TCard;
begin
For Card in Cards do
Card.Free;
end;
謝謝,我會嘗試這 –
與卡做一些事情。目前我有例如'cards [i] .Cname:= adoquery1.FieldByName('Name')。AsString;'我假設我仍然可以做這樣的事情抱歉,我還沒有搜索,只是仍然在更改代碼 –
是的,你可以循環它們就像一個正常的數組:) – whosrdaddy
停止並使用TObjectList。對象銷燬由列表管理。 –
whosrdaddy
還沒有使用TobjectList 將調查它..但如果我使用,那麼我可以做一個TObjectlist.destroy? –
TObjectList是你需要的。但是你有沒有聽說過for循環?嚴重的是,如果你看不到這個解決方案,你需要回到基礎知識。 –