Передача или чтение парамера экземпляра класса
Есть ClassA потомок Sprite. В одном из методов этого класса создаётся экземпляр ClassB, тоже потомок Sprite. Оба класса представляют собой интерфейс пользователя. Теперь сам вопрос. Ширина ClassB зависит от ширины ClassA. Ширину ClassB предлагается задать одним и 2-х способов.
1) Передать размеры в конструкторе ClassB. 2) В классе ClassA объявить публичные статические переменные, и в ClassB импортировать ClassA и считывать эти свойства (например: w = ClassA.wi). Мне кажется 2-ой способ какой-то неправильный... Как лучше/правильнее поступить? |
Ширина экземпляра ClassB зависит от ширины экземпляра ClassA.
экземпляр ClassB должен иметь ссылку на экземпляр СlassA |
а тогда просто к parent экземпляра ClassB обратится не проще?
|
Если вы будете уверены, что у вас всегда parent - это ClassA, то можно и через него. Но если все же придется когда-нибудь что-нибудь переделывать в архитектуре, то лучше передавать ссылку отдельно, тогда будет все равно, кто там parent.
|
понятно. спасибо.
|
Лучше не иметь ссылку в явном виде, а подписываться на событие.
То есть:
|
т.е. при удалении ClassB нужно будет подчищать подписку? Хотя подписываться и очищать подписку можно в самом ClassB, только ему опять же нужно передавать ссылку на ClassA. А не слишком ли геморно получается?
|
Удалять подписку можно из того места, где происходит удаление экземпляра ClassB. Можно сделать это и автоматически, но тогда, как вы сказали, придётся сохранять ссылку на экземпляр ClassA. Как мне кажется, ничего особо плохого в этом нет, если ссылка будет использоваться только для удаления подписки.
Однако, в случае сохранения ссылки, нужно учесть, что при удалении экземпляра ClassA ссылка на него в экземпляре ClassB должна быть занулена. Узнать момент удаления можно, например, путём посылки из экземпляра CLassA события удаления. Это в том случае, если предполагается удалять экземпляр ClassA. Вопрос номер 2: как вы, без использования событий, будете узнавать, что ширина экземпляра ClassA изменилась? Вариант только один: хранить в нём ссылку на экземпляр ClassB и вызывать при изменении своей ширины какой-то метод этого экземпляра. Не находите это немного некрасивым? А если есть ещё третий, четвертый и т.д. экземпляры ClassB? Не забывайте также, что при удалении экземпляров ClassB ссылки на них нужно занулять. Вот здесь, по-моему, как раз и начинается настоящий гемор :) Добавлено через 2 минуты А, да, есть ещё один вариант: в экземпляре ClassB повесить на этерфрейм (или таймер) обработчик, который будет сравнивать ширину экземпляра ClassA со своей, и, в случае несовпадения, обновлять свою ширину. Этот метод для настоящих извращенцев :) |
Хм... действитель, экземпляров ClassB может быть много. Спасибо!
|
Часовой пояс GMT +4, время: 01:25. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.