![]() |
Клонирование объектов
Есть палитра компонентов для схемы. У каждого компонента есть общий класс: Component, этот класс наследуется собственным классом компонента.
В общем случае это выглядит так: http://pavel.server.su/class-as3.PNG Вопрос такой: как заставить общий класс Component клонировать дочерние объекты? Не хочется писать собственный метод клонирования для каждого класса. Или может прототип какой-нибудь можно написать? |
Визуальные компоненты, насколько знаю не клонируются, так что через сеарилизацию не получится.
Теоретически можно склонировать значения полей через рефлексию, но только открытых. Если у Вас чисто графика, что на graphics рисуется - можно склонировать его. Если нет - ИМХО для каждого - свой метод clone() - самое простое |
Спасибо за информацию. Но неужели нет другого способа? В дочерних объектах функциях клонирования будет одинаковая. Будут различаться только имена классов.
Может есть что-нибудь типа такого? Код AS3:
|
есть new (this as Object).constructor();
|
Но подобный метод не будет клонированием, поскольку никакие свойства объекта клону переданы не будут.
Для сохранения свойств можно было бы добавить отдельную переменную (массив), где были бы перечислены названия свойств, которые нужно установить клону. |
Почти. Очевидно, что новый объект с умолчальными свойствами является полным клоном другого объекта такого же класса с умолчальными свойствами )
|
Всё таки я бы не поленился переопределять clone() в каждом наследнике.
|
Цитата:
Цитата:
dimarik, огромное спасибо! Это то, что мне нужно было. Объект нормально воссоздаётся. Сейчас будем тестировать поведение с другими объектами. Есть некоторые сомнения. Добавлено через 6 минут dimarik, ещё раз огромное спасибо! Всё отлично заработало, а самое главное, что структура кода осталась весьма симпатичной и элегантной. |
Да, Вы неправильно назвали тему ). Клонирование = копирование. Чистый лист бумаги - это объект с умолчальными свойствами. Записки на такой бумажке хорошо копирует... копир )
|
Цитата:
|
| Часовой пояс GMT +4, время: 03:57. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.