О пакетах классов
После компиляции в байткод, пакет в котором находится класс фактически становится его неймспейсом (в байткоде нет пакетов). А значит работать с пакетами можно как с неймспейсами. Что это нам дает:
Получение класса по имени:
// Через getDefinitionByName var c1:Class = getDefinitionByName("b.A") as Class; // Через ApplicationDomain.currentDomain, тоже самое, что предыдущая запись var c2:Class = ApplicationDomain.currentDomain.getDefinition("b.A") as Class; // Через неймспейс var n:Namespace = new Namespace("b"); var c3:Class = n::A; // Через неймспейс и строковое название класса var s:String = "A"; var c4:Class = n::[s]; trace(c1, c2, c3, c4); // [class A] [class A] [class A] [class A]
// Получение класса через getDefinitionByName var c1:Class = getDefinitionByName("A") as Class; // Получение класса через ApplicationDomain.currentDomain, тоже самое, что предыдущая запись var c2:Class = ApplicationDomain.currentDomain.getDefinition("A") as Class; // Получение класса через неймспейс var c3:Class = public::A; // Получение класса через неймспейс и строковое название класса var s:String = "A"; var c4:Class = public::[s]; trace(c1, c2, c3, c4); // [class A] [class A] [class A] [class A]
// Через пакет var o1:* = new b.A(); // Тоже, но через неймспейс var n:Namespace = new Namespace("b"); var o2:* = new n::A(); // Через безымянный пакет var o3:* = new A2(); // Через неймспейс var o4:* = new public::A2(); trace(o1, o2, o3, o4); // [object A] [object A] [object A2] [object A2]
Всего комментариев 14
Комментарии
09.11.2009 17:02 | |
Спасибо, Яски!
Вы полностью разрешили мой вопрос: http://flashzone.ru/forum/index.php?showtopic=3090 NB! Главное чтобы кто-то не обозвал это "грязным хаком" ))) |
10.11.2009 00:28 | |
Не совсем полностью — как объявить тип переменной с неймспейсом я так и не нашел.
|
10.11.2009 14:37 | |
12.11.2009 13:14 | |
Цитата:
как объявить тип переменной с неймспейсом я так и не нашел
http://flashzone.ru/forum/index.php?...ndpost&p=14160 |
12.11.2009 15:00 | |
У меня так не работает:
Цитата:
1084: Синтаксическая ошибка: doublecolon перед semicolon.
|
13.11.2009 17:30 | |
Мммм... как бы компилятор и конфликты не связаны... конфликты будут на этапе загрузки вашей флешки в которой классы находятся в безымянном пакете другой флешкой, в которой классы так же находятся в безымянном пакете т.как классы из второй флешки просто проигнорируются если грузить в родительский ApplicationDomain.
Да, типичный пример - когда в проекте документ класс берется из темплейта и имя ему не меняется - тот же Main.as или что-то похожее. И ситуация отнюдь не надуманная, я с этим много раз сталкивался. |
|
Обновил(-а) wvxvw 13.11.2009 в 17:38
|
18.06.2010 18:24 | |
Добрались руки до CS4.
Действительно, тип с неймспейсом уже так, как в CS3 не объявишь. ((( Но сами объекты строятся по-прежнему Код:
new (public::Мой_класс_в_безымянном_пакете) |
08.10.2011 02:33 | |
спасибо , пригодилось!
|
Последние записи от Яски
- Инициализатор класса (05.11.2009)
- О пакетах классов (03.11.2009)
- valueOf в AS3 (07.10.2009)
- Сравнение строк в естественном порядке для Flash (18.05.2009)
- Быстрый Math.round для положительных чисел (17.01.2009)