![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2010
Адрес: Санкт-Петербург
Сообщений: 44
|
Спасибо, это работает!
Но, как я понимаю, такой конструкции лучше избегать при написании программ? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Во-первых, Вы не сможете использовать свой класс Б нигде, кроме как ребенком в классе А ("сильная связанность").
Во-вторых, Вы где-нибудь видели ситуацию, когда мама молча отправляет сына в магазин, а он оттуда должен позвонить и узнать, что нужно купить? Класс А создает ребенка-Б для каких-то целей. Он обязан дать Б все, что ему нужно для работы. Кроме того, Б не должен делать никакой работы А или указывать А, что нужно сделать. Б — всего-лишь инструмент для решения задач А. И больше ничего он не должен делать и больше ни о чем не должен думать.
__________________
Reality.getBounds(this); |
|
|||||
|
преобразование типов - нормальная практика, например при прослушивании события функции обработчику известно, что его сгенерировал класс-потомок EventDispatcher, и чтобы избежать лишних ошибок, нужно его преобразовать к классу или интерфейсу того экзкмпляра, к которому подписывались. Единственное чего стоит избегать - это прямое обрщение к классам-ролителям, как говорилось ранее. Любое обратное взаимодействие от класса-потомка осуществляется только через события, а родитель уже решает как реагировать и реагировать ли вообще.
__________________
ответ прост: be || !be == true |
|
|||||
|
Регистрация: Apr 2010
Адрес: Санкт-Петербург
Сообщений: 44
|
Подскажите, каким образом перестроить архитектуру того, что есть:
1) Класс А, создающий потомков класса Б и присваивающий им определенный параметр П 2) Класс Б, в котором прописано событие MouseEvent.CLICK, вызывающее метод М Нужно, чтобы Класс А знал, когда и в каком в экземпляре Б вызывается метод М и какой у него параметр П. Добавлено через 30 минут Перенес описание события MouseEvent.CLICK из класса Б в класс А. Задача решена, но я думаю, что это не лучший вариант размещать этот код в основном классе. |
|
|||||
|
как раз наоборот, в данном случае лучше, плюс ко всему в вашем случае функция слушатель можно сделать один всего, особенно если использовать приведение типов:
package { import flash.display.MovieClip; import flash.events.MouseEvent; public class A extends MovieClip { var arB:Array //Массив для объектов B public function A():void { arB = new Array(); for (var i:int = 0; i < 10; i++) { var b :B = new B(i); b.mouseChildren = false;//отключаем потомков мыши b.buttonMode = true;//делаем кнопкой addChild(b) b.x = i * 50; stage.addEventListener(MouseEvent.CLICK, mouseClickHandler);//слушаем клик по сцене arB.push(b) } } private function mouseClickHandler(e:MouseEvent):void { var target = e.target as B;//приводим к типу B if (target)//если попали по B { var index :int = arB.indexOf(target);//ищем объект в массиве if (index != -1) { target.m(); trace(target.p); } } else//если промахнулись, то target будет равен null, т.к. привести к типу не удалось { trace("промах"); } } } }
__________________
ответ прост: be || !be == true |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Зачем тебе обращаться к переменной родителя?
Возьми передай эту переменную ребёнку когда тебе нужно, через set метод ребёнка. |
|
|||||
|
[+4 08.09.13]
Регистрация: May 2012
Сообщений: 131
|
public class A{ private var some:SomeClass; public function A{ some = ...; var b:B = new B(some); } } тогда в классе B да и вообще в любом классе var some:SomeClass = A.instance().some; |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|