Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.04.2011, 20:21
chatman вне форума Посмотреть профиль Отправить личное сообщение для chatman Посетить домашнюю страницу chatman Найти все сообщения от chatman
  № 1  
Ответить с цитированием
chatman

Регистрация: Oct 2007
Адрес: Moscow
Сообщений: 45
Отправить сообщение для chatman с помощью ICQ
Attention Клонирование объектов

Есть палитра компонентов для схемы. У каждого компонента есть общий класс: Component, этот класс наследуется собственным классом компонента.

В общем случае это выглядит так:


Вопрос такой: как заставить общий класс Component клонировать дочерние объекты? Не хочется писать собственный метод клонирования для каждого класса. Или может прототип какой-нибудь можно написать?

Старый 09.04.2011, 21:52
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 2  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Визуальные компоненты, насколько знаю не клонируются, так что через сеарилизацию не получится.
Теоретически можно склонировать значения полей через рефлексию, но только открытых.
Если у Вас чисто графика, что на graphics рисуется - можно склонировать его.
Если нет - ИМХО для каждого - свой метод clone() - самое простое

Старый 10.04.2011, 22:16
chatman вне форума Посмотреть профиль Отправить личное сообщение для chatman Посетить домашнюю страницу chatman Найти все сообщения от chatman
  № 3  
Ответить с цитированием
chatman

Регистрация: Oct 2007
Адрес: Moscow
Сообщений: 45
Отправить сообщение для chatman с помощью ICQ
Спасибо за информацию. Но неужели нет другого способа? В дочерних объектах функциях клонирования будет одинаковая. Будут различаться только имена классов.

Может есть что-нибудь типа такого?
Код AS3:
var newElement = new this();
Или как-то так.

Старый 10.04.2011, 22:21
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
есть new (this as Object).constructor();
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.04.2011, 22:34
dodoaav вне форума Посмотреть профиль Отправить личное сообщение для dodoaav Найти все сообщения от dodoaav
  № 5  
Ответить с цитированием
dodoaav

Регистрация: Mar 2011
Сообщений: 21
Но подобный метод не будет клонированием, поскольку никакие свойства объекта клону переданы не будут.
Для сохранения свойств можно было бы добавить отдельную переменную (массив), где были бы перечислены названия свойств, которые нужно установить клону.
__________________
Пытаюсь делать игры для детей

Старый 10.04.2011, 22:37
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Почти. Очевидно, что новый объект с умолчальными свойствами является полным клоном другого объекта такого же класса с умолчальными свойствами )
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.04.2011, 22:49
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Всё таки я бы не поленился переопределять clone() в каждом наследнике.

Старый 11.04.2011, 00:24
chatman вне форума Посмотреть профиль Отправить личное сообщение для chatman Посетить домашнюю страницу chatman Найти все сообщения от chatman
  № 8  
Ответить с цитированием
chatman

Регистрация: Oct 2007
Адрес: Moscow
Сообщений: 45
Отправить сообщение для chatman с помощью ICQ
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Всё таки я бы не поленился переопределять clone() в каждом наследнике.
А дело тут не в лени, а в том, что это будет сплошной Copy/Paste, а это неправильная концепция программирования.

Цитата:
Сообщение от dodoaav Посмотреть сообщение
Но подобный метод не будет клонированием, поскольку никакие свойства объекта клону переданы не будут.
Для сохранения свойств можно было бы добавить отдельную переменную (массив), где были бы перечислены названия свойств, которые нужно установить клону.
Абсолютно верное замечание! Только мне нужно просто запустить конструктор нового неявного объекта. Свойства копировать не нужно. (прошу прощения, наверное, я неправильно тему назвал)

dimarik, огромное спасибо! Это то, что мне нужно было. Объект нормально воссоздаётся.

Сейчас будем тестировать поведение с другими объектами. Есть некоторые сомнения.

Добавлено через 6 минут
dimarik, ещё раз огромное спасибо! Всё отлично заработало, а самое главное, что структура кода осталась весьма симпатичной и элегантной.


Последний раз редактировалось chatman; 11.04.2011 в 09:55.
Старый 11.04.2011, 00:38
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Да, Вы неправильно назвали тему ). Клонирование = копирование. Чистый лист бумаги - это объект с умолчальными свойствами. Записки на такой бумажке хорошо копирует... копир )
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 11.04.2011, 12:13
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 10  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Цитата:
А дело тут не в лени, а в том, что это будет сплошной Copy/Paste, а это неправильная концепция программирования.
У суперклассов тоже должен быть clone. В конечном итоге никакого копипаста не будет вообще.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
copy objects , копирование объектов

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:57.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.