2013-10-22 1 views
0

사용자 지정 구성 요소 'TCARD'에 대한 파괴 절차가 있습니다. 그런 다음 런타임 동안 내가 다음 배열사용자 지정 구성 요소 배열을 파괴하는 방법

Cards: array[1..20] of TCards 

을 만들어 할 몇 가지 ... 및 절차의 마지막에 내가 배열의 모든 TCards을 파괴하고 싶습니다. 어떻게해야합니까? 아니면 한 번에 하나씩해야합니다. 당신이 TObjectList<T>를 사용하는 경우

cards[1].destroy; 
cards[2].destroy; 
.... 
cards[20].destroy; 
+2

정지 객체에 대한 배열을 사용하고 TObjectList와 사용 : 어떤 이유로 당신이 TObjectList를 사용하지 않을 경우

type TMyCardList = class(TObjectList<TCard>) public // add needed behaviours function FindHighestCardBySuit(ASuit : TSuit) : TCard; procedure Shuffle; // etc ... end; 

, 당신은 간단한 루프를 사용하여 객체를 확보 할 수 있습니다. 개체 삭제는 목록에 의해 관리됩니다. – whosrdaddy

+0

TobjectList를 사용하지 않았습니다. 이 살펴볼 것입니다. 그렇다면 TObjectlist.destroy를 사용할 수 있습니까? –

+0

TObjectList 이 필요합니다. 하지만 for 루프에 대해 들어 본 적이 없습니까? 진지하게, 당신이 그 해결책을 볼 수 없다면 당신은 약간의 기본으로 돌아갈 필요가 있습니다. –

답변

6

, 이것은 당신이해야 할 모든 목록을 파괴하는 것입니다, 당신을 위해 수행됩니다.

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; 

추가 보너스로 사용자 정의 개체를 만들고 카드 관련 기능을 추가 할 수 있습니다.

procedure FreeCards(Cards : TCards); 

var 
    Card : TCard; 

begin 
For Card in Cards do 
    Card.Free; 
end; 
+0

덕분에 나는 이것을 시도 할 것입니다. –

+0

카드로 할 일이 있습니다. 현재 나는 예를 들어'cards [i] .Cname : = adoquery1.FieldByName ('Name') .AsString; '나는 아직도 미안하다. 나는 아직 검색하지 않았고 여전히 코드를 바꾼다. –

+0

네, 할 수 있습니다. 루프를 일반 배열처럼 반복하십시오. – whosrdaddy