Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.47 MB
Время: 0.004 c
2-1291389620
Василий Иванович
2010-12-03 18:20
2011.02.27
Поиск ключа в реестре.


2-1291741116
stas
2010-12-07 19:58
2011.02.27
повторный запуск TThread


15-1290093673
картман
2010-11-18 18:21
2011.02.27
ТЗ


15-1290167268
Jeer
2010-11-19 14:47
2011.02.27
Тенденции, однако..


2-1291813130
Scott Storch
2010-12-08 15:58
2011.02.27
сравнение имен файлов по маске





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский