![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Привет.
Все по сабжу конечно могут сказать, что один хранит интерфейсы, другой объекты. Но я вот вижу, что от TList эти классы слишком не отличаются! Потому и прошу показать ситуации, т.е. куски кода по которым можно было понять, что эти классы действительно упрощают программирование или понимание кода. В кусках кода прошу привести случаи без использования класса, как бы было и как с использованием ;) Сорри, что спрашиваю базовые вещи, но что-то никак не могу осознать чем в принципе помогают классы ? ) |
|||
|
||||
aktuba |
|
||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 7 Всего: 38 |
По поводу TInterfaceList ничего сказать не могу, а по поводу TObjectList - все просто. Если используешь TList и хранишь там ссылки на объекты, то при удалении элемента из списка необходимо самому удалять объекты (Object.Free), а при использовании TObjectList, список делает это сам. За это отвечает параметр OwnsObjects.
Пример очистки списка с использованием TList:
А теперь тоже самое, но с помощью TObjectList:
-------------------- ![]() |
||||
|
|||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
aktuba, Только в очистке выгода ?
|
|||
|
||||
Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 15 Всего: 76 |
Еще ненадо тип переводить из Pointer в TObject и наоборот. Добавлено через 1 минуту и 3 секунды в Items имеется ввиду. Добавлено через 1 минуту и 47 секунд TInterfaceList тож самое только под интерфейсы заточен. Это сообщение отредактировал(а) Rennigth - 27.5.2008, 15:22 -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
Rennigth, спасибо ;)
|
|||
|
||||
aktuba |
|
||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 7 Всего: 38 |
Во многом, если правильно использовать. Например, выборочно удалять объекты: TList:
TObjectList:
-------------------- ![]() |
||||
|
|||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
aktuba, Спасибо ;)
|
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Посмотрел я на эту темку и появилась у меня идея - а не написать ли статейку на тему этих классов? Кто что думает по этому поводу?
Сорри за оффтопик. |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
THandle, Я думаю, надо каждому умелому выложить все что он знает об извращениях с этими классами и потом можно написать статью ;)
|
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Ну выкладывайте тогда ![]() Хотя главное что надо сделать - это полностью изучить сами эти классы, их реализацию, чем я и займусь тогда, хотя недавно я их уже ковырял ![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
http://forum.vingrad.ru/forum/topic-97983.html |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
Snowy, так... хорошо
![]() ![]() ![]() Добавлено через 1 минуту и 3 секунды Кстати... не плохо было бы все статьи переместить как раз в раздел "статьи"... ![]() |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
1. Classes.TList наиболее универсален и предназначен для работы с указателями (4х байтовыми числами).
интересный на мой взгляд прием работы с TList'ом:
т.о. получаем класс, который сам умеет управлять (выделять/освобождать) память под элементы типа запись. з.ы. я не гарантирую работоспособность класса, приведенный код является лишь общим примером. 2. Contnrs.TObjectList = сlass(TList) - наследник TList'а, упрощающий работу со списком объектов. имеет интересный метод FindInstanceOf, позволяющий производить поиск объекта в списке по классу. так же может управлять "жизнью" ввереных ему объектов при OwnsObjects = true 3. Classes. TThreadList = class(TObject) – класс-список, нет, не потоков) Просто потокобезопасный список указателей. Инкапсулирует в себе TList, но список предоставляемых возможностей урезан (по сравнению с TList), правда вполне достаточен для безопасной работы со списком указателей на данные из разных потоков. 4. Classes.TInterfaceList = class(TInterfacedObject, IInterfaceList) Потокобезопасный список интерфейсов, так же реализующий интерфейс IInterfaceList. Удобен, как ни странно, при работе со списками интерфейсов. не является наследником TList. инкапсулирует в себе работу с TThreadList (см.3) Корректен с точки зрения подсчета ссылок на хранимые интерфейсы. Так же стоит упомянуть о TCollection и TCollectionItem, о TStrings и его наследниках (TStringList). а так же о множестве прекрасных классов-списков, помимо TObjectList, описаных в модуле Contnrs... но об этом не в этот раз) -------------------- There are always someone smarter than you... |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
TList является родоначальником практически всех списков.
Остальные списки - наследники надстройки над ним. ЗЫ. Он точно также позволяет искать объект по указателю. А сам TObjectList и т.п. можно использовать, как руководство по такому наследнику. Хотя особого смысла в этом нет - с появлением в этом году генериков в 2008-й дельфи, такая необходимость практически пропадёт. Достаточно будет написать что-то вроде TGenericList<TMyClass> и готов специализированный список под нужный класс. |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: нет Всего: 9 |
MetalFan, Кул! Молоток! ;)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |