Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Предок классов (http://www.flasher.ru/forum/showthread.php?t=143164)

LEXiy 09.08.2010 15:16

Предок классов
 
Вопрос скорее глупый, но мне интересный :)
Допустим есть некий ролик (который не будет менятся в будущем) и есть несколько других роликов (разные по содержанию и смыслу, но имеющие одинаковые методы), они будут служить "Скинами"
Задача первого ролика загружать в себя "скин" и отправлять в него настройки. Так вот.. Каждый скин будет обрабатывать настройки по-разному, а первый ролик должен быть уверен, что методы обработки в них во всех есть.

Есть пара мыслей как это сделать:
1. Создать "скинам" общего предка с пустыми (:( ) методами, а в дальнейшем их оверрайдить
2. Опять создать общего предка, а в методах диспатчитьЕвент
3. Сделать интерфейс... Малопонятный для меня способ.

Подскажите кто знает. Как сделать так, чтобы потом мне перед внуками не было стыдно, что я это сделал?

derhab 09.08.2010 15:48

думаю, 3-й способ
Создаете интерфейс, описываете в нем сигнатуры всех необходимых методов для классов-скинов
Классы флэшек-скинов должен реализовывать этот интерфейс. Если какой-то метод в таком классе будет отсутствовать - ролик скина просто не скомпилируется
Если в каких-то методах есть что-то общее для всех скинов, то создайте супер класс и соотвественно в наследниках оверрайдите методы там где это необходимо...

LEXiy 09.08.2010 15:56

Ок! Спасибо!
А можно в классе одновременно extends класс и implement интерфейс??

...и еще! Как тогда в главном ролике писать?
Код AS3:

var newChild:Sprite = /* что-нибудь */;
(newChild as ISkin).getParams(...);

Так?

udaaff 09.08.2010 16:23

Я передаю класс скина, а компонент уже приводит его к определенному типу, и далее управляет его свойствами и методами.

derhab 09.08.2010 16:24

Цитата:

Сообщение от LEXiy (Сообщение 927905)
Ок! Спасибо!
А можно в классе одновременно extends класс и implement интерфейс??

да, можно

насчет второго вопроса.. а зачем приводить newChild к ISkin?
в классе newChild должен быть реализован метод getParams по-любому

Код AS3:

var newChild:Skin = new Skin() // новый объект скина
newChild.getParams(...);


LEXiy 09.08.2010 16:29

Ну так это... Скины-то разные должны быть.
И Классы соответственно разные. Если им не создавать общего предка, то ближайший родственник - это Sprite (или типа того), а у него нет метода getParams

incvizitor 09.08.2010 16:43

Код AS3:

var newChild:ISkin = new Skin();
newChild.getParams(...);

Так как все скины имплементят ISkin, будет работать для всех.

LEXiy 09.08.2010 16:47

Цитата:

Сообщение от incvizitor (Сообщение 927913)
Код AS3:

var newChild:ISkin = new Skin();
newChild.getParams(...);

Так как все скины имплементят ISkin, будет работать для всех.

О! А так, значит, можно? :) (назначать интерфейсу экземпляр класса)
Круто! Буду пробовать.

incvizitor 09.08.2010 17:28

Ну как бы вы не интерфейсу присваиваете, а объекту.

Код AS3:

var newChild:ISkin;

Означает что переменной newChild можно присвоить объект некого класса имплементируещего ISkin.

LEXiy 11.08.2010 11:47

Что-то вот это вот:
Код AS3:

var newChild:ISkin = new Skin();
newChild.getParams(...);

не получается.

Ай ну да ладно! Сделаю им общего предка с пустыми функциями... Всем спасибо!


Часовой пояс GMT +4, время: 16:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.