|
|
|||||
[+ 1.0 08.10.14]
блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
|
Магия Enumiration (перечисления)
собственно, есть такой код
package { /** * Пример реализации паттерна TypeSave Enumeration на языке ActionScript 3. * * @author Aleh Krutsikau * @version 0.1 */ public class Season { // Ссылка на единственный экземпляр класса. public static const WINTER : Season = new Season("winter"); public static const SPRING : Season = new Season("spring"); public static const SUMMER : Season = new Season("summer"); public static const AUTUMN : Season = new Season("autumn"); private static var _enumCreated:Boolean = false; // magic happens here, the static code block { _enumCreated = true; } private var _seasonName : String; /** * Конструктор. */ public function Season(seasonName : String) { if (_enumCreated) throw new Error("The enum is already created."); _seasonName = seasonName; } public function get seasonName() : String { return _seasonName; } } } |
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
Этот код выполнится перед первым вызовом метода класса, в том числе и конструктора.
|
|
|||||
"сверху вниз", но после инициализации всех статических свойств, видимо, это и подразумевается под магией
package { public class Season { _enumCreated = (trace("assign (true)") == null);// выполнится самым поледним private static var _enumCreated:Boolean = (trace("init (false)") != null); public static const WINTER : Season = new Season("winter"); public static const SPRING : Season = new Season("spring"); public static const SUMMER : Season = new Season("summer"); public static const AUTUMN : Season = new Season("autumn"); private var _seasonName : String; public function Season(seasonName : String) { if (_enumCreated) throw new Error("The enum is already created."); _seasonName = seasonName; trace( seasonName + " created"); } public function get seasonName() : String { return _seasonName; } } } Последний раз редактировалось silin; 09.06.2014 в 22:39. |
|
|||||
.
|
Причем, забавно. Чтобы инициализировать статику и исполнить код в теле класса достаточно упомянуть этот класс, можно даже где-нибудь на уровне пакета или класса.
|
|
|||||
Это в Air SDK, если мне не изменяет память.
А во flex SDK при создании первого экземпляра или при первом вызове статического метода. Из-за этой особенности при переезде с компилятора на компилятор поломал голову.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
.
|
Ага, проверил. Во Flex можно воспользоваться конструкцией кастинга или конвертации.
Class(Season) или Season as Class. Либо в общем случае Object(Season) или Season as Object. |
Часовой пояс GMT +4, время: 22:07. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|