|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
|
Передача или чтение парамера экземпляра класса
Есть ClassA потомок Sprite. В одном из методов этого класса создаётся экземпляр ClassB, тоже потомок Sprite. Оба класса представляют собой интерфейс пользователя. Теперь сам вопрос. Ширина ClassB зависит от ширины ClassA. Ширину ClassB предлагается задать одним и 2-х способов.
1) Передать размеры в конструкторе ClassB. 2) В классе ClassA объявить публичные статические переменные, и в ClassB импортировать ClassA и считывать эти свойства (например: w = ClassA.wi). Мне кажется 2-ой способ какой-то неправильный... Как лучше/правильнее поступить? |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Ширина экземпляра ClassB зависит от ширины экземпляра ClassA.
экземпляр ClassB должен иметь ссылку на экземпляр СlassA
__________________
Отряд Котовскага |
|
|||||
Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
|
а тогда просто к parent экземпляра ClassB обратится не проще?
|
|
|||||
Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
|
Если вы будете уверены, что у вас всегда parent - это ClassA, то можно и через него. Но если все же придется когда-нибудь что-нибудь переделывать в архитектуре, то лучше передавать ссылку отдельно, тогда будет все равно, кто там parent.
|
|
|||||
Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
|
понятно. спасибо.
|
|
|||||
Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
|
Лучше не иметь ссылку в явном виде, а подписываться на событие.
То есть:
|
|
|||||
Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
|
т.е. при удалении ClassB нужно будет подчищать подписку? Хотя подписываться и очищать подписку можно в самом ClassB, только ему опять же нужно передавать ссылку на ClassA. А не слишком ли геморно получается?
|
|
|||||
Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
|
Удалять подписку можно из того места, где происходит удаление экземпляра ClassB. Можно сделать это и автоматически, но тогда, как вы сказали, придётся сохранять ссылку на экземпляр ClassA. Как мне кажется, ничего особо плохого в этом нет, если ссылка будет использоваться только для удаления подписки.
Однако, в случае сохранения ссылки, нужно учесть, что при удалении экземпляра ClassA ссылка на него в экземпляре ClassB должна быть занулена. Узнать момент удаления можно, например, путём посылки из экземпляра CLassA события удаления. Это в том случае, если предполагается удалять экземпляр ClassA. Вопрос номер 2: как вы, без использования событий, будете узнавать, что ширина экземпляра ClassA изменилась? Вариант только один: хранить в нём ссылку на экземпляр ClassB и вызывать при изменении своей ширины какой-то метод этого экземпляра. Не находите это немного некрасивым? А если есть ещё третий, четвертый и т.д. экземпляры ClassB? Не забывайте также, что при удалении экземпляров ClassB ссылки на них нужно занулять. Вот здесь, по-моему, как раз и начинается настоящий гемор Добавлено через 2 минуты А, да, есть ещё один вариант: в экземпляре ClassB повесить на этерфрейм (или таймер) обработчик, который будет сравнивать ширину экземпляра ClassA со своей, и, в случае несовпадения, обновлять свою ширину. Этот метод для настоящих извращенцев Последний раз редактировалось SamFR; 19.11.2009 в 01:24. |
|
|||||
Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
|
Хм... действитель, экземпляров ClassB может быть много. Спасибо!
|
Часовой пояс GMT +4, время: 16:49. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|