![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Доступ к списку (private) класса TA из класса TB содержащего TA
cross © (2010-12-08 12:32:00)условно есть 2 класса (TA и TB). Класс TB содержит в себе объект TA.
TA = class(TObject)
private
{ ... }
FPacks: TList<TZIPForge>;
public
{ ... }
// ?
end;
TB = class(TObject)
private
{ ... }
FA: TA;
public
{ ... }
procedure fill_needed(APacks: TList<TZIPForge>); // <- сюда должен передоваться список TA.FPacks.
end;
Из класса TB мне нужно иметь возможность работать со списком TA.FPacks (он private). Как обычно поступают в таких случаях:
1. Сделатьproperty Packs: TList<TZIPForge> read get_packs;
2. Сделать property Packs[Idx: Integer]: TZIPForge read get_pack;
propety packs_count: Integer read get_packs_count;
Ega23 (2010-12-08 21:21:00) [1]
>
> Ну, вражина он и индийским способом пролезет:
>
> TFriendControl = class(TA);
> TFriendControl(TA).FPacks
Если FPacks - private, то пролезет только в рамках данного юнита.
_Юрий (2010-12-08 19:27:00) [2]Я в таких случаях делаю так
protected
property Packs: TList<TZIPForge> read FPacks
Ega23 (2010-12-08 13:34:00) [3]
> Или в старших версиях Delphi это уже не так?
В "старших" версиях появилась директива strict private
icWasya (2010-12-08 13:27:00) [4]Вроде бы если классы находятся в одном модуле, то имеют возможность напрямую обращаться к привантым данным друг друга.
Или в старших версиях Delphi это уже не так?
Servy (2010-12-08 13:03:00) [5]
> Ну, вражина он и индийским способом пролезет:
Главное, что у нас грабли на крылечке не лежат, на радость менее опытным программистам. А уж если он сейф вскрывает, чтоб на грабли наступить - вероятно сей индеец знает, что делает.
RWolf (2010-12-08 12:59:00) [6]В случае 1) класс TB может дополнить список, удалить из списка элементы и т.п. В случае 2) эти операции запрещены.
Кстати, приватные поля классов видны в пределах модуля, так что, если TA и TB расположены в одном модуле, можно обойтись без свойств.
И. Павел (2010-12-08 12:58:00) [7]> то в него вражина и понадобавлять может чего, или поудалять.
Ну, вражина он и индийским способом пролезет:
TFriendControl = class(TA);
TFriendControl(TA).FPacks
Servy (2010-12-08 12:56:00) [8]
> там есть большая разница?
Есть, если TList наружу торчит, то в него вражина и понадобавлять может чего, или поудалять. А так не выйдет у него. В зависимости от того (нужно ли строго не давать никому снаружи добавлять в TList, или удалять из него егошными методами) и зависит ответ.
Я бы оставил TList, тут тебе и Enumerator готовый, и процедура добавления/удаления. А так придется свои прослойки писать. Впрочем, бывают случаи, когда такие прослойки оправданы.
Медвежонок ХМЛ (2010-12-08 12:48:00) [9]В таких случаях обычно поступают так, что бы подобных вопросов в принципе не возникало.
Иными словами проектируют классы более адекватно.
Ну или по крайней мере не стоят так долго в раздумьях между двух копен сена 1. и 2. (там есть большая разница?)