Главная страница
    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-1289908468
Василий Жогарев
2010-11-16 14:54
2011.02.27
УДК и ББК


10-1170751259
Juice
2007-02-06 11:40
2011.02.27
Как заставить нормально работать Early Binding?


2-1291121307
12
2010-11-30 15:48
2011.02.27
Запрос в потоке. Правильно пишу?


11-1206640025
arthur
2008-03-27 20:47
2011.02.27
app crashing when sysutils exceptions are trowed


2-1290769217
dm
2010-11-26 14:00
2011.02.27
изменение ip адреса шлюза и пр





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