Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TObjectList. Правильно ли я делаю?


Страницы:   1 2

zorik ©   (2008-12-11 09:58:00) 


TMyList = class;

TMyItem = class
private
  FMyList: TMyList;
 ...
public
 ...
end;

TMyList = class(TObjectList)
private
 ...
public
 function Add(AItem: TMyItem): Integer; overload;
 function Add: Integer; overload;
 property Items[Index: Integer] read GetMyItem write SetMyItem;
end;

implementation

function TMyList.Add(AItem: TMyItem): Integer;
begin
 result := inherited Add(AItem);
end;

function TMyList.Add: Integer;
var
 AItem: TMyItem;
begin
 AItem: TMyItem.Create;
  AItem.FMyList := self;
 result := Add(AItem);
end;


Интересует коректность выделеного с точки зрения ООП. Дело в том что TMyItem нужно знать свойства TMyList


Сергей М.   (2008-12-11 11:00:00) [21]

Родителем-контейнером вполне можно выбрать и T[Owned]Collection и TComponent - обр.связь элементов с контейнером там уже реализована.


Сергей М.   (2008-12-11 10:51:00) [22]

Вполне корректно.


Ins   (2008-12-11 10:50:00) [23]

На мой взгляд, ничего противозаконного тут нет. Нормально, что элемент списка знает о своем контейнере, иногда это нужно. А в RTL/VCL и не такое встречается, так порой класс использует в своем интерфейсе своих же потомков (TFiler -> TReader/TWriter), вот это немного диковато для меня :)


Юрий Зотов   (2008-12-11 10:48:00) [24]

Объект получает ссылку на свой контейнер - обычное дело.

А вот насчет Add - здесь можно наступить на грабли. Delphi под рукой нет, поэтому проверьте сами - если TObjectList уже имеет метод Add и этот метод не виртуальный, то свои методы Add назовите как-нибудь иначе (например, AddItem). Вообще, если унаследованныйо метод Add(TObject) уже есть, то метод Add(TMyItem) совсем не нужен.

И подумайте насчет Extract. После вызова этого метода объект уже не будет содержаться в контейнере - поэтому не стоит ли в объекте очистить ссылку на контейнер?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо