Главная страница
    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.46 MB
Время: 0.003 c
15-1290093745
БарЛог
2010-11-18 18:22
2011.02.27
Программа для создания меню запуска


2-1291559004
v_a_belousov
2010-12-05 17:23
2011.02.27
Завершение работы потока


6-1201379773
Max.66RUS
2008-01-26 23:36
2011.02.27
Отправка файла POST-запросом...


8-1180354902
gray_falcon
2007-05-28 16:21
2011.02.27
Помогите с выводом изображения


2-1291800746
cross
2010-12-08 12:32
2011.02.27
Доступ к списку (private) класса TA из класса TB содержащего TA





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский