|
|
|||||
стервочка (я мужик)
|
Яски, как мы это сделаем?
|
|
|||||
Et cetera
Регистрация: 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); } UIControl запрещает использовать dispatchEvent извне, оставляя для наследников метод $dispatchEvent под свои нужды. Если бы UIControlCore для рассылки базовых событий использовал this.dispatchEvent вместо super.dispatchEvent, тогда бы после написания первого же контрола на базе UIControl, всё ядро бы перестало работать. А т. к. подобная ситуация, когда нам потребуется закрыть использование каких-либо стандартных свойств, может возникнуть очень часто, то во избежании проблем, лучше использовать методы и свойства супер-класса, если вам нужны именно они. Надо заметить, что даже на уровне реализации флешевых классов, никакие переопределения базовых свойств не приводят к поломке того же EventDispatcher, что говорит о том, что либо в коде классов используются методы супер-класса, либо по каким-то иным ссылкам. |
|
|||||
Регистрация: Jun 2007
Сообщений: 374
|
Цитата:
Допустим, в UIControlCore стоит this.dispatchEvent; создаю UIControlKid, в нем есть строчка: $dispatchEvent(...) Оно вызовет что ли метод dispatchEvent UIControl'а, который запрещен? |
|
|||||
стервочка (я мужик)
|
__etc, Loader ломается если у него переопределить load переданный в конструкторе реквест приводит к ошибке, правда, этого можно избежать.
Добавлено через 5 минут s8000_1, дядь, сломаться должен был не наследник а родитель: 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. |
|
|||||
Регистрация: Jun 2007
Сообщений: 374
|
Теперь понятно. Теперь буду везде, где надо, использовать super. Спасибо за разъяснения
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Ну это скорее частный случай и он, наверное, не единственный, но в целом такого не видно.
|
|
|||||
блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
|
__etc, теперь все понятно — спасибо. Никакой магии тут нет. Я просто думал, может есть какая-то невероятная сила протекции кода, неведомая мне. Оказалось все просто — если нужно использовать super — используем, не нужно использовать — ну его нафиг.
PS: Над любой строчкой кода надо думать — не надо программирование всего и вся сводить к шаблонам. |
Часовой пояс GMT +4, время: 20:37. |
|
« Предыдущая тема | Следующая тема » |
|
|