Страници с колекции

Сайт на Delphi: ежедневни Delphi-новини, документация, статии, преглед, интервю, компютърен хумор.

Ако вече сте запознати с работата ми, трябва да знаете, че обичам да използвам компонента TList за динамично съхраняване на списък с обекти. Например, ако при динамично създаване на изображения (вижте раздел „Запазване на данни за проекта“) искам да съхраня указател към изображения с допълнителна информация в списък, тогава компонентът TL1st ще бъде такъв списък. В Глава 4 ще разгледаме примери за динамично съхраняване на списъци с обекти и също ще използваме TL1st. Защо? Това е просто въпрос на навик, защото Delphi има по-ефективно средство за съхраняване на списъци с обекти - колекции.

За да съхранявате динамичен масив от обекти, най-добрият вариант е да използвате компонента TCollection. Той може да съхранява обекти от предварително дефиниран тип и автоматично да създава нов обект, когато даден елемент бъде добавен към колекцията. За да разберем по-добре как работят колекциите, нека да разгледаме пример от реалния живот.

Да предположим, че трябва да съхраним динамичен списък от работници в паметта, който ще включва информация като фамилия, собствено име и дата на раждане, пол и т.н. За да запазим примера прост, ще се ограничим само до тези данни.

Първо, нека създадем обект, който ще съхранява всички необходими свойства. В този случай обектът трябва да е наследник на TCollectionItem:

Наследяването от TCollection I ten е задължително. Кодът за съхраняване на обекти от този тип с помощта на колекции е показан в списък 2-25.

Списък 2.25. Съхраняване на обекти в колекция

процедура TForml.bnTestCollectionCIick(Подател: TObject): var pi. TPersonInfo: i:Integer: begin PersonCol1ecti on:=TCol1ecti on.Create(TPersonInfo):

//Добавяне на един елемент

// Добавяне на друг елемент, но ние ще го запълним с. // да не се създава отделна променлива с TPersonInfo(PersonCollection.AddO) do begin Name:='Irina'. Фамилия - 'Смирнова'; Pol:='"': Възраст.=24: край:

За създаване на нова колекция се използва методът Create, който извиква конструктора на обекта. Като параметър той трябва да предава класа на обекта, съхраняван в колекцията. В нашия случай това е TPersonInfo.

Методът Add се използва за добавяне на нов елемент към колекцията. Не е необходимо да предава никакви параметри, методът сам създава нов обект, добавя го към колекцията и като резултат връща указател към създадения обект. В нашия случай резултатът се съхранява в променливата pi от тип TPersonInfo:

Методът Add връща типа TCollectlonItem и за да присвоите този резултат на променливата p1, резултатът се преобразува в тип TPersonInfo. Как колекцията "знае" какъв тип обект да създаде? Помните ли, когато създадохме колекцията, предадохме TPersonInfo кутия на конструктора? Благодарение на това всичко работи както трябва и без наша намеса.

В този пример създаваме два елемента за събиране и ги попълваме с данни. След това се стартира цикъл, в който се подреждат всички елементи и на екрана се извежда информация за обектите.

Както можете да видите, всичко е по-просто и в някои отношения дори по-удобно, отколкото когато използвате компонента YOU st. И накрая, нека да разгледаме набързо свойствата и методите на колекциите. Да започнем със свойствата:

В Items, списъкът с елементи в колекцията; за достъп до конкретен елемент по индекс, използвайте записа: Елементи[индекс]

В NextIO, уникален идентификатор, който се присвоява на нов елемент, когато се добавя към колекцията (всеки елемент от колекцията има уникален идентификатор и тезиидентификатори могат да се използват във вашата програма).

Един обект има повече методи, отколкото свойства:

В Insert създайте нов елемент и го вмъкнете в колекцията на конкретен индекс (например, ако искате новият елемент да бъде първият и за да можете да го наричате ltems[0], използвайте метода Insert, като посочите индекс 0 като параметър).

Това са основните методи и свойства, от които може да се нуждаете, докато разработвате свои собствени приложения.

В допълнение към самата колекция, трябва да имате добро разбиране на всички елементи, които са наследници на класа TCollectlonItem, което означава, че те наследяват неговите свойства и методи. Нека да разгледаме основните свойства и методи:

Changed – Този метод връща true, ако елементът е бил променен.

Въпреки че колекциите предлагат много удобен начин за съхраняване на обекти (структури от данни, които могат да бъдат имплементирани като обект, който наследява от TCollectlonItem), аз все още съм свикнал със структурите и обекта TList, така че ще използвам този метод в тази книга. Но това не означава, че колекциите са лоши, напротив, добри са, просто тук навикът работи.

ЗАБЕЛЕЖКА Изходният код за този пример се намира на компактдиска в директорията Sources\ch02\MenuXP.