![]() |
Оверрайд метода, который использован как callback
Есть у меня один класс, обертка для загрузчика картинок. В нем есть вот такая конструкция Код AS3:
И есть класс наследник этой обертки, в котором делается перезапись этого метода Код AS3:
Оказалось нифига подобного. Метод в наследнике не вызывается. То есть в данном случае, как колбэк передается именно жесткая ссылка на метод суперкласса как на объект, и никакие оверрайды уже не учитываются. Вот такие вот пирожки, товарищи :D Просто хотел поделиться находкой, которая мне чуть мозг не взорвала) Решение: Цитата:
|
Можешь компилируемый пример дать?
|
А _imageLoader не статический случаем?
Явно где-то ошибка. Оверрайд должен работать и работает как ожидается. |
Цитата:
Я тоже думал, что это ошибка. Но много раз проверил. Действительно, из ImageLoader вызывается именно метод суперкласса. 100% вызывается. При этом метод наследника полностью игнорится, ни трейсы ни брейкпоинты в нем не срабатывают. И код, соответственно тоже не выполняется. Я сначала подумал, что может куда-то inline закрался, поэтому валится брейкпоинт, но нет, инлайнов в этом проекте нет. Убрал всё, оставил в наследнике один трейс. Итог - трейса нет, код в методе суперкласса выполнился. А вот, чтобы убедиться работают ли в принципе оверрайды я сделал оверрайд другого метода обработчика событий MouseEvent.CLICK, и он отлично вызывается сначала в наследнике, а потом в этом суперклассе А вот если я помещу ImageLoader наоборот в наследника, и там дам ссыль на этот метод (уже перезаписанный), то метод суперкласса тоже вызовется. А самом ImageLoader код такой: Код AS3:
|
В output выводится b.
Код AS3:
|
callme, да, все верно.
Только что выяснил из-за чего все сломалось. Там у меня в ImageLoader стоит блок try / catch, в котором вызывается этот колбэк. И оказалось, что _closeButton в месте где она добавляется == null (как раз в этом методе). Но ошибки не вылетало из-за этого самого try /catch. Выполнение метода просто тихо отваливалось как раз после добавления картинки Всё, тему можно считать закрытой. Все работает, и дело не в ссылке на метод. |
| Часовой пояс GMT +4, время: 12:52. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.