Форум: "Начинающим";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];
ВнизДоступ к списку (private) класса TA из класса TB содержащего TA Найти похожие ветки
← →
cross (2010-12-08 12:32) [0]условно есть 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;
← →
Медвежонок ХМЛ © (2010-12-08 12:48) [1]В таких случаях обычно поступают так, что бы подобных вопросов в принципе не возникало.
Иными словами проектируют классы более адекватно.
Ну или по крайней мере не стоят так долго в раздумьях между двух копен сена 1. и 2. (там есть большая разница?)
← →
Servy © (2010-12-08 12:56) [2]
> там есть большая разница?
Есть, если TList наружу торчит, то в него вражина и понадобавлять может чего, или поудалять. А так не выйдет у него. В зависимости от того (нужно ли строго не давать никому снаружи добавлять в TList, или удалять из него егошными методами) и зависит ответ.
Я бы оставил TList, тут тебе и Enumerator готовый, и процедура добавления/удаления. А так придется свои прослойки писать. Впрочем, бывают случаи, когда такие прослойки оправданы.
← →
И. Павел © (2010-12-08 12:58) [3]> то в него вражина и понадобавлять может чего, или поудалять.
Ну, вражина он и индийским способом пролезет:
TFriendControl = class(TA);
TFriendControl(TA).FPacks
← →
RWolf © (2010-12-08 12:59) [4]В случае 1) класс TB может дополнить список, удалить из списка элементы и т.п. В случае 2) эти операции запрещены.
Кстати, приватные поля классов видны в пределах модуля, так что, если TA и TB расположены в одном модуле, можно обойтись без свойств.
← →
Servy © (2010-12-08 13:03) [5]
> Ну, вражина он и индийским способом пролезет:
Главное, что у нас грабли на крылечке не лежат, на радость менее опытным программистам. А уж если он сейф вскрывает, чтоб на грабли наступить - вероятно сей индеец знает, что делает.
← →
icWasya © (2010-12-08 13:27) [6]Вроде бы если классы находятся в одном модуле, то имеют возможность напрямую обращаться к привантым данным друг друга.
Или в старших версиях Delphi это уже не так?
← →
Ega23 © (2010-12-08 13:34) [7]
> Или в старших версиях Delphi это уже не так?
В "старших" версиях появилась директива strict private
← →
_Юрий (2010-12-08 19:27) [8]Я в таких случаях делаю так
protected
property Packs: TList<TZIPForge> read FPacks
← →
Ega23 © (2010-12-08 21:21) [9]
>
> Ну, вражина он и индийским способом пролезет:
>
> TFriendControl = class(TA);
> TFriendControl(TA).FPacks
Если FPacks - private, то пролезет только в рамках данного юнита.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c