![]() |
приведение типов (не получается)
не понимаю почему не удаётся привести тип объекта к нужному. Код ниже, MainClass - основной.
Код AS3:
Код AS3:
в моём понимании zzz сначала Sprite, потом TestClass(zzz) - приводит zzz к типу TestClass и нам становятся доступны все методы этого класса. Но методы не доступны, почему? И почему пишут, что zzz ещё Sprite, разве он уже не TestClass? если мы заменим строку zzz.myMethod(); на if (zzz is TestClass){zzz.myMethod();} выходит та же ошибка, получается zzz имеет уже тип TestClass, но методы этого класса вызвать не может. Как же так? |
Код AS3:
Код AS3:
|
понятно, что если бы самого начала zzz был TestClass, всё было бы ок. Но он сначала Спрайт, а потом должен стать TestClass. Каждый раз писать (zzz as TestClass) тоже не дело. Мне нужно чтобы переменная сменила свой тип раз и навсегда. Я и пытался это сделать - TestClass(zzz); У меня несколько классов:TestClass1, TestClass2, TestClass3 ... и объектом какого класса станет zzz заранее незвестно.
открыв Мука на стр.191 мы увидим: var meal:Food = new Apple(); Apple(meal); теперь типом meal стал Apple, я лишь повторил |
Код AS3:
|
но в этом случае всё равно придётся объявлять тип переменной zzz1 заранее.
Вопрос 1: может ли переменная сменить свой тип? Вопрос 2: как понимать цитату из книги (Мук на стр.191)? |
1. Нет. Может только принять расширенный тип.
2. Мук не прав. Либо вы вырвали из контекста. Под рукой нет книги — проверить не могу. Код AS3:
Цитата:
В чём вообще проблема-то? |
1. Сменить тип переменная не может, она может начать ссылаться на переменную другого типа (типа который расширяет тип объявленный, как тип переменной)
2. В meal он помещает объект типа, Apple, говоря Apple(meal) он прямо указывает, что переменная meal хранит Apple, хотя правильнее было бы (meal as Apple). Само по себе Apple(meal) ничего не значит, видимо это для того, чтобы показать как использовать приведение типов. |
Вложений: 1
вот скрин
|
Apple(meal) это скорее не приведение, а преобразование типов.
(meal as VirtualPet) не выдаст ошибки, а вернёт нул, видимо в этом и смысл записи Мука. |
Ну я ж говорил из контекста выдрали)
Главное в этом коде — это комменты. Больше этот код ничего не делает. в первом случае - всё ок во втором ошибка приведения типов. Всё. Вот, кстати, вчера попалась заметка по разности скорости обработки: кастование против приведения - "bmp as Bitmap" в 4 раза быстрее чем Bitmap(bmp) Цитата:
Если не так, то вообще не надо приводить к конкретным классам. Зваедите им общий класс TestClass в котором будет myMethod и оверрайдьте его в TestClass1, TestClass2, TestClass3 Код AS3:
|
| Часовой пояс GMT +4, время: 01:51. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.