PDA

Просмотр полной версии : Обращение к параметрам пра-пра-пра parentов


Exact1990
06.03.2012, 20:12
Можно ли как-то обратиться к параметру класса, расположенного ниже в иерархии отображения? Если неизвестна глубина класса, но известно его имя?

Пример:
Main (параметр par)
- Tip1
-- Tipa
--- Tiprt
- Tip2
-- Tiprt
- Tip3
--Tipb
--- Tipc
---- Tiprt

Нужно, чтобы все экземпляры Tiprt могли использовать main.par

Deimos747
06.03.2012, 20:39
Пересмотрите структуру классов, у вас неправильный подход.

Exact1990
06.03.2012, 20:46
А как нужно подойти? Чтобы Tiprt всегда располагался на одном уровне? Так тогда сильно ухудшится "универсальность" класса и его нельзя уже будет использовать часто, а только лишь там, где позволяет глубина

Wolsh
06.03.2012, 21:07
Если под тридевятый класс я должен заводить паблики в Мейне, слово "универсальность класса" звучит как издевка, уж простите. Универсальность – это когда не надо ехать выкапывать прадедушку чтобы поменять ему ДНК, чтобы собачка его праправнука смогла есть консерву.

Exact1990
06.03.2012, 21:12
Уже не тот раздел, конечно.. Но проблема в том, что этот параметр VK: ApiConnection... И он работает почему-то только в одном классе, вожусь уже кучу времени(
http://www.flasher.ru/forum/showthread.php?p=1060964#post1060964

Wolsh
06.03.2012, 21:14
Вы пытаетесь сделать солдата "универсальным", таким чтобы его можно было кинуть в любой окоп/вертолет и он "все правильно сделал" за счет того, что перед каждым выстрелом звонит в Генштаб согласовать свои действия. Потому как он "универсальный" и ему не надо знать своего командира. Обычно эти фильмы заканчиваются дулом у виска генералиссимуса. И крахом проекта до полной переписки.

Добавлено через 4 минуты
Почему, с какой стати некий класс ВДРУГ захотел узнать нечто глобальное?
Ему приказали что-то сделать? Почему тогда в приказе не передали все необходимые инструкции?
Где находится логика? Кто принимает решения и отдает команды? Он же и обязан располагать всеми необходимыми данными и сообщать подчиненным все что им нужно для выполнения распоряжения.

Exact1990
06.03.2012, 21:21
Wolsh хорошо, согласен, что всё это глупо, но я уже не знаю, как иначе получить APIConnection рабочий :(

Yahen
06.03.2012, 22:46
Обычно вопрос передачи подобных вещей решается одним из трех путей
1. передать ссылку на необходимый параметр в конструкторе на хранение ( не всегда представляется возможным или удобным или вменяемым для сборщика мусора)
2. Передать ссылку на необходимый параметр при вызове конкретного метода ( не всегда получается красиво, особенно если это слушатель )
3. Ссылки на общие глобальные данные хранятся в публичных свойствах статического класса, к коим имеют доступ все заинтересованные классы.

А "Универсальный солдат" подучающий задания из генштаба вполне себе имеет право на жизнь. Только он не сам должен за заданиями ходить а получать пакеты с инструкциями. Тогда и универсальность можно соблюсти и генерала ему в генштабе в любой момент сменить.

dimarik
07.03.2012, 00:08
Обычно вопрос передачи подобных вещей решается одним из трех путей
1. передать ссылку на необходимый параметр в конструкторе на хранение ( не всегда представляется возможным или удобным или вменяемым для сборщика мусора)
2. Передать ссылку на необходимый параметр при вызове конкретного метода ( не всегда получается красиво, особенно если это слушатель )
3. Ссылки на общие глобальные данные хранятся в публичных свойствах статического класса, к коим имеют доступ все заинтересованные классы.


1, 2 и 3 ничем для сборщика не отличаются, поэтому зря вы за него заговорили.

Yahen
07.03.2012, 01:29
Способ 1 обычно подразумевает хранение ссылки внутри класса. Если класс не DisplayObject И при этом долгоживущий, могут быть нюансы, для новичка неочевидные. Почему этого GC не зачистил мой спрайт :)
В принципе любая реализация от этого не застрахована. Но тут вероятность граблей на мой взгляд выше.
А так да. При грамотном использовании разницы для GC нет никакой.
PS Мне вообще работа GC в во флеш плеере нравится. По сравнению с реализацией GC в PHP это вообще космический корабль. Хотя все же на мой взгляд зря деструкторов нет.

dimarik
07.03.2012, 09:58
Ну хорошо, чем ссылка, переданная через конструктор отличается от ссылок, полученных другим путем?

Wolsh
07.03.2012, 10:52
dimarik, там было еще важное слово "на хранение", то есть ссылка, полученная конструктором, и сохраненная в приватной переменной. Ссылка, переданная в метод (или конструктор), но не сохраненная, будет "стерта из памяти" как любая локальная переменная, по завершении метода. Разве для GC здесь нет разницы?

Exact1990
07.03.2012, 11:27
Ссылки на общие глобальные данные хранятся в публичных свойствах статического класса, к коим имеют доступ все заинтересованные классы.
А можно поподробнее об этом? Как создать такой класс? Просто со static? Как к нему обращаться? Или где можно про это почитать? А то про статические методы и параметр читал, а вот чтобы весь класс был статическим...
Почитал тут: http://www.flasher.ru/forum/showthread.php?t=142177
Буду пробовать...

Yahen
07.03.2012, 11:38
Как-то вот так приблизительно:
public class MyStorage
{
public static var ApplicationTitle: String = '';
};

И обращаться потом в любом месте, где хочется:
MyStorage.ApplicationTitle = 'Моя самая крутая программа';