![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Классы на базе TList...
Knight © (2007-04-27 14:20:00)Сколько раз хотел разобраться с этим вопросом, но всё время что-то отвлекало... но надоело, хочу таки разобраться! Мож поможите? :)
Допустим есть какой-то тип
TMyItem=record
Str1:String;
...
end;
Надо загнать эти итемсы в лист так чтобы обрачаться с ним
MyList[i].Str1
а не
PMyItem(MyList[i])^.Str1
Мож кто накидает скелет класса?
TMyList=class(TList)
end;
default (2007-04-27 14:57:00) [41]Knight © (27.04.07 14:45) [4]
ну ты можешь внутри класса своей специализированной коллекции использовать тот же TList, а в интерфейс своего класса добавить методы типа Add(item: TYourItemType); Remove(item: TYourItemType)....
и будет типа
....
Private List: TList;
...
типами элементов коллекции я тут считаю записи(как у тебя в сабже)
procedure TYourCollection.Add(item: TYourItemType);
begin
List.Add(@item)
end;
function TYourCollection.Contains(item: TYourItemType): Boolean;
var
i: Integer;
begin
for i := 0 to List.Count-1 do
if PYourItemType(List(i))^ = item then begin
Result := True;
Exit;
end;
Result := False;
end;
end;
Knight (2007-04-27 14:45:00) [42]> [1] clickmaker © (27.04.07 14:22)
> таких скелетов целый склад в Classes.pas VCL
Вот там как-паз окромя самого TList и нет ничего... а без интерфейсов никак?
Knight (2007-04-27 14:36:00) [43]> [2] Сергей М. © (27.04.07 14:30)
"какой-то" для примера.. а так будет вполне определённый для конкретной задачи.
Сергей М. (2007-04-27 14:30:00) [44]
> Допустим есть какой-тотип
При условии "какой-то" (а не заранее определенный) готового решения нет и быть не может, если это только не диспинтерфейс.
clickmaker (2007-04-27 14:22:00) [45]таких скелетов целый склад в Classes.pas VCL
function Get(Index: Integer): IInterface;
procedure Put(Index: Integer; const Item: IInterface);
property Items[Index: Integer]: IInterface read Get write Put; default;