Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.09.2013, 16:13
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 1  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
По умолчанию Обращение к статическим константам класса через переменную

Допустим у меня есть несколько классов с заданными константами (количество того-то, массив с тем-то)
Код AS3:
public class RainbowDash
{
	public static const TAIL_COLOR:uint = 0xff00ff;
	public static const NAME:String = "Rainbow Dash";
 
	...
}
 
public class PinkiePie
{
	public static const TAIL_COLOR:uint = 0x0000ff;
	public static const NAME:String = Pinkie Pie";
 
	...
}
И если имеется один общий обработчик таких данных, который не знает заранее, какой класс ему попадется, то возникает проблема обращения к этим константам.

Допустим обработчик у нас такой:
Код AS3:
public class MeaninglessMachine
{
	public static function process(classToProcess:Class):void
	{
		trace(classToProcess.NAME);
	}
}
Но не катит - свойство undefined. (И не странно, ведь у Class нет свойства NAME)
Если делать передачу переменной типа Object - та же тема. Если делать через двойные скобки - тоже:
Код AS3:
trace(getDefinitionByName(getQualifiedClassName(_classToProcess)).NAME);
Где собака зарыта?

Я понимаю что можно сделать и другими методами, но стало интересно, как передавать нормальный референц на класс

Старый 04.09.2013, 16:35
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Использовать интерфейс и геттеры, более адекватная структура будет.

Код AS3:
public function process(classToProcess:IColoredClass):void
__________________
Марк Tween

Старый 04.09.2013, 16:47
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 3  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
Использовать интерфейс и геттеры, более адекватная структура будет.
Цитата:
Я понимаю что можно сделать и другими методами, но стало интересно, как передавать нормальный референц на класс
Тут вопрос не в архитектуре а в самой возможности обращения к статическим полям класса)

Старый 04.09.2013, 16:58
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 4  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
Есть еще вариант объявить аргумент так: classToProcess:*, что отключает проверки, но надежности коду совсем не добавляет.

Старый 04.09.2013, 17:02
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
ну или сделать так classToProcess:Object / Dynamic Class и обращаться так classToProcess["NAME"] прокатит возможно
__________________
Марк Tween

Старый 04.09.2013, 17:07
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 6  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
ну или сделать так classToProcess:Object / Dynamic Class и обращаться так classToProcess["NAME"] прокатит возможно
Забыл написать что так тоже делал - все тот же undefined

Старый 04.09.2013, 17:27
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 7  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Можно достать через describeType, но в вашей задаче, я не уверен, что это хорошая идея.
__________________
местонахождение

Старый 04.09.2013, 18:31
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 8  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Цитата:
Использовать интерфейс и геттеры, более адекватная структура будет.
Код AS3:
public function process(classToProcess:IColoredClass):void
А в функцию вы передаёте класс ? Который реализует интерфейс ?

Цитата:
Забыл написать что так тоже делал - все тот же undefined
При classToProcess:* или classToProcess:Object не должно быть undefined.
__________________
Oomph


Последний раз редактировалось AlexLucas; 04.09.2013 в 19:22.
Старый 04.09.2013, 20:15
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 9  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Банальный и типизированный if/switch не подходит? У Вас, что 100 таких классов?
__________________
http://www.chessmax.ru

Старый 04.09.2013, 21:03
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от KumoKairo Посмотреть сообщение
Забыл написать что так тоже делал - все тот же undefined
видимо undefined не из-за динамического доступа, а из-за чего-то еще
Код AS3:
package
{
	import flash.display.Sprite;
 
	public class Main extends Sprite
	{
 
		public function Main():void
		{
			process(Class1);// NAME : class1
			process(Class2);// NAME : class2
 
		}
 
		private function process(classToProcess:Class):void
		{
			trace( "NAME : " + classToProcess["NAME"] );
		}
	}
 
}
 
class Class1
{
	static public const NAME:String = "class1";
}
class Class2
{
	static public const NAME:String = "class2";
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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