Форум 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=123853)

Fatality 12.04.2009 02:30

Зачем нужен кастинг ?
 
Здраствуйте. Объясните мне пожалуйста, зачем нужен кастинг ? Да да, именно зачем, а не что это такое. Проблемы как таковой нет, но есть здоровый интерес. Вот к примеру написал:
Код AS3:

package {
        import flash.display.Sprite;
        import flash.text.TextField;
        import flash.events.Event;
        import flash.events.MouseEvent;
        public class RootClass extends Sprite {
                private var txt:TextField;
                public function RootClass() {
                        stage.addEventListener("click", onStageClick);
                }
                public function onStageClick(event:MouseEvent) {
                        txt = new TextField();
                        txt.type = "input";
                        txt.x = event.stageX;
                        txt.y = event.stageY;
                        txt.addEventListener("added", onTxtAdded);
                        addChild(txt);
                }
                public function onTxtAdded(event:Event) {
                        trace(event.target);
                        stage.focus = event.target as TextField;
                }
        }
}

Если убрать кастинг, то компилятор начнет материться о невозможности преобразовать тип Object в InteractiveObject. Тут впринципе все понятно, но какого тогда trace(event.target), выдает — [object TextField]. Это компилятор так издевается ? Если он и так знает, что это текстовое поле, то что он от меня хочет ?!

fljot 12.04.2009 02:50

ну так trace не компилятор выдаёт, а уже плеер(виртуальная машина?) в процессе исполнения. а компилятор ругается во время компиляции.

BlooDHounD 12.04.2009 02:56

трэйс выдаёт то, что выдаёт метод toString()

Fatality 12.04.2009 03:21

Цитата:

трэйс выдаёт то, что выдаёт метод toString()
Это и так понятно, только сути вопроса не меняет.

BlooDHounD 12.04.2009 04:01

ну если это понятно, тогда зачем так яро обращено внимание в вопросе на этот факт?

кастинг нужен для того, что бы виртуальная машина не обращалась к объекту за списком классов и не искала в нём нужный класс. в случаи с методами/свойствами идёт ещё обращение к таблице методов всех классов, и поиск в ней нужного метода, потом попытка найти в динамических свойствах и т.д.

короче, Вы делает работу за ВМ, тем самым упрощая ей жизнь.

Gaen 12.04.2009 05:19

BlooDHounD, где можно подробнее почитать про работу виртуальной машины?

Fatality 12.04.2009 05:46

Вот теперь понятно, большое спасибо BlooDHounD, а то меня начинал напрягать этот вопрос.

Smrad 14.04.2009 14:28

Прикольно, а я думал, что даункасты не нужны. Т.е. использование собственно типа как id типа это всегда фейл.

BlooDHounD 14.04.2009 14:44

GAIKER, в интернете.
Smrad, а даункасты и не нужны.

etc 14.04.2009 14:47

Цитата:

Сообщение от Smrad (Сообщение 812683)
Прикольно, а я думал, что даункасты не нужны. Т.е. использование собственно типа как id типа это всегда фейл.

Не каждый Object есть TextField.


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

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