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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.01.2009, 16:29
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 21  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Яски, как мы это сделаем?

Старый 18.01.2009, 17:13
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 22  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Лучше вы мне скажите как. Я плохо понимаю __etc, видимо он хочет замылить тему.

Старый 18.01.2009, 17:31
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 23  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Я ничего не замыливаю, если вы меня не понимаете, то я ничем помочь не могу, с русским языком у меня вроде всё нормально.

Базовый класс каких-нибудь контролов, UIControl, кусок кода:

Код:
public override function dispatchEvent(event:Event):Boolean {
    throw new IllegalOperationError('dispatchEvent not allowed here');
}

protected final function $dispatchEvent(event:Event):Boolean {
    return super.dispatchEvent(event);
}
Этот базовый класс наследуется ещё от какого-нибудь базового, типа UIControlCore с какой-нибудь фигнёй внутри.
UIControl запрещает использовать dispatchEvent извне, оставляя для наследников метод $dispatchEvent под свои нужды. Если бы UIControlCore для рассылки базовых событий использовал this.dispatchEvent вместо super.dispatchEvent, тогда бы после написания первого же контрола на базе UIControl, всё ядро бы перестало работать. А т. к. подобная ситуация, когда нам потребуется закрыть использование каких-либо стандартных свойств, может возникнуть очень часто, то во избежании проблем, лучше использовать методы и свойства супер-класса, если вам нужны именно они.
Надо заметить, что даже на уровне реализации флешевых классов, никакие переопределения базовых свойств не приводят к поломке того же EventDispatcher, что говорит о том, что либо в коде классов используются методы супер-класса, либо по каким-то иным ссылкам.

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

Регистрация: Jun 2007
Сообщений: 374
Цитата:
Этот базовый класс наследуется ещё от какого-нибудь базового, типа UIControlCore с какой-нибудь фигнёй внутри.
UIControl запрещает использовать dispatchEvent извне, оставляя для наследников метод $dispatchEvent под свои нужды. Если бы UIControlCore для рассылки базовых событий использовал this.dispatchEvent вместо super.dispatchEvent, тогда бы после написания первого же контрола на базе UIControl, всё ядро бы перестало работать.
Сломал мозг, пытаясь понять ситуацию, когда оно перестает работать...
Допустим, в UIControlCore стоит this.dispatchEvent; создаю UIControlKid, в нем есть строчка:
$dispatchEvent(...)
Оно вызовет что ли метод dispatchEvent UIControl'а, который запрещен?

Старый 18.01.2009, 18:21
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 25  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
__etc, Loader ломается если у него переопределить load переданный в конструкторе реквест приводит к ошибке, правда, этого можно избежать.

Добавлено через 5 минут
s8000_1, дядь, сломаться должен был не наследник а родитель:
Код AS3:
class A extends EventDispatcher {
 
	...
 
	public function set size(value:Number):void
		...
		// такая строка ничего не сломает
		super.dispatchEvent( new Event( "sizeChanged" ) );
		// такая строка всё сломает нафиг
		this.dispatchEvent( new Event( "sizeChanged" ) );
	}
 
}
 
class B extends A {
 
	...
 
	public override function dispatchEvent(event:Event):Boolean {
		throw new IllegalOperationError();
	}
 
	...
 
}


Последний раз редактировалось BlooDHounD; 18.01.2009 в 18:27.
Старый 18.01.2009, 19:16
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 26  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
Теперь понятно. Теперь буду везде, где надо, использовать super. Спасибо за разъяснения

Старый 18.01.2009, 20:15
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 27  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
__etc, Loader ломается если у него переопределить load переданный в конструкторе реквест приводит к ошибке, правда, этого можно избежать.
Ну это скорее частный случай и он, наверное, не единственный, но в целом такого не видно.

Старый 19.01.2009, 08:56
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 28  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
__etc, теперь все понятно — спасибо. Никакой магии тут нет. Я просто думал, может есть какая-то невероятная сила протекции кода, неведомая мне. Оказалось все просто — если нужно использовать super — используем, не нужно использовать — ну его нафиг.

PS: Над любой строчкой кода надо думать — не надо программирование всего и вся сводить к шаблонам.

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

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

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


 


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


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