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

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

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
По умолчанию Как узнать кто вызвал метод

Здравствуйте! Есть класс CL1, который ничего не знает, что творится за его пределами. У класса есть метод func1(). В любом другом классе (например CL2) создается экземпляр класса CL1. Этот экземпляр вызывает метод
Код AS3:
cl1Instance.func1();
Так вот как мне в функции func1() узнать кто ее вызвал? То есть как получить ссылку на cl1Instance? Заранее благодарен.
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 27.12.2011, 22:17
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
cl1Instance есть экзепляр от CL1. Следовательно - this внутри func1()

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Вот это я...! Ничего, торможение - тоже движение. Спасибо. А вопрос создавался с целью узнать из какого класса был вызван метод. Так вот как узнать кому принадлежит экземпляр cl1Instance? То есть в каком классе был создан cl1Instance?
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 27.12.2011 в 22:38.
Старый 27.12.2011, 22:30
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Вот это вряд ли. Только в дебаг плеере можно узнать стек вызовов через (new Error("")).getStackTrace();

Старый 27.12.2011, 22:37
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 5  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Спасибо. Вся эта каша связана с тем что есть гет/сет свойство. Но одни классы могут вызывать сеттер, а другие не должны. Вот и подумал поставить проверку в сеттере из какого класса он был вызван, и соответственно запрещать или разрешать изменение переменных. Создавать и использовать интерфейсы определяющие гет или сет для определенных экземпляров не хочу. Вернее в моем случае - это будет слишком запутанно.
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 27.12.2011 в 22:39.
Старый 27.12.2011, 22:48
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Я обычно (и судя по этому форуму еще не один разарботчик) забивают и просто держат в голове ряд прявил, кому можно менять, кому нельзя. Проблем не создавало.
В библиотеках можно модификатор internal использовать, но штука очень ограниченная. Может неймспесы? - не знаю, не пробовал.

Вообще это как синглтонами(не к ночи будь помятуты) - народ мучается, проверят, не создан ли экземпляр второй раз, выбрасывает исключение. А результат? Я за всю жизнь словил это исключение только 2 раза. Просто потому что человек смотрит: "Ага, сервис, ага, он должен быть где-то инициализирован данными, как же его инициализировать или как протянуть инициализированный, оо, да это синглтон"

И да, интерфейсы обычно выглядят в этом случае как "оверхед".


Последний раз редактировалось expl; 27.12.2011 в 22:51.
Старый 27.12.2011, 22:55
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 7  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
да тут помогут нэймспейсы
__________________
Хороший отдых - половина работы.

Старый 27.12.2011, 23:04
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 8  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Ну, в моем случае нужен public. Так как доступ должен осуществлятся из других пакетов. Но и если бы это было не так, компилятор не позволит поставить разные модификаторы на гет и сет.
Можно и держать в памяти, но я люблю писать код, будучи уверенным, что непредвиденных обстоятельств не должно случится. Звучит очень громко . По крайней мере стремлюсь к тому чтобы такое не случилось. Ведь после 1000 строк - эта штука вылетает из головы, и нечаянно можно изменить то что изменяться не должно. Ведь согласитесь, бывают же очень большие запутанные проэкты. А потом пол дня поиска зарытой собаки...
По поводу синглтонов - согласен. Лично мне и в голову бы не пришло написать new MySingletone(); потому что знаю что он синглтон. И при обращении MySingletone.instance - знаю что если экземпляра нет - он создастся, если сть - не создастся.

Добавлено через 1 минуту
А вот про пространства имен надо бы почитать. Никогда не представлял что это такое. Ладно, раз помогут - почитаю... Спасибо всем за внимание.
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 27.12.2011 в 23:09.
Старый 27.12.2011, 23:48
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 9  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Сделайте два интерфейса, один с геттером, другой с сеттером (ну или с обоими) и где необходимо используйте интерфейсы.

Добавлено через 3 минуты
Цитата:
Но и если бы это было не так, компилятор не позволит поставить разные модификаторы на гет и сет.
Можно установить разные неймспейсы, но удобства это не добавляет.
__________________
משיח לא בא
משיח גם לא מטלפן

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
А что делать, если мой класс CL1 унаследован от DisplayObject?
Код AS3:
var cl1Instance:ICL1 = new CL1();
this.addChild(cl1Instance);
Выдает что нельзя преобразовать ICL1 в DisplayObject. А вот такая конструкция работает:
Код AS3:
var cl1Instance:CL1 = new CL1();
this.addChild(cl1Instance);
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 28.12.2011 в 00:23.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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