2013-05-28 2 views
1

У меня есть базовый класс («Мастер»), который реализует сеттер (назовем его «а»). Существует еще один класс, который расширяет Master («Extended») и переопределяет сетку «a».Вызов super.setter вызывает геттер без видимых причин

Геттер для «a» каждый раз возвращает новый экземпляр объекта и также переопределяется в расширенном классе.

Переопределенный сеттер выглядит примерно так:

override public function set a(value:Object):void 
{ 
    doSomethingWithValue(value); 
    super.a = value; 
    doSometingExtraWithValue(value); 
} 

Теперь для магии, что происходит: всякий раз, когда переопределяется сеттер называется, момент super.a = value выполняется, переопределенный геттер быть вызван без причины бы то ни было.

Почему, вопрос. Существует не какое-либо правило, в котором говорится, что «call getter при вызове сеттера», есть ли?

+0

Как выглядит главный сеттер? Вы называете геттер там? – Larusso

+0

Мастер-установщик просто '_a = value', никакой ссылки на геттер никак. –

ответ

0

В As3 нет скрытых правил такого рода. Существует два простых способа, чтобы узнать, что случилось:

  • Используйте точку останова со вспышкой Debugger (доступна на флэш Развивать или Flash Builder Exemple). Просто добавьте эту точку останова в свой геттер, чтобы у вас была стек, и вы можете взаимодействовать с ней.
  • добавить следующий код в добытчика, вы будете иметь StackTrace, и вы увидите, что вызвало геттер вызов:

    след; (новый Error() getStackTrace().)

+0

Приятный трюк с ошибкой, я отдам его. –

Смежные вопросы