Показать сообщение отдельно
Старый 30.09.2006, 23:09
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 14  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
По умолчанию 24 Полное Копирование объекта

С помощью класса ByteArray, мы можем копировать полностью объекты. Под полным копированием имеется ввиду, что мы можем копировать так же "дочерние" объекты копируемого объекта, и так далее. Например если у нас есть массив с объектами, и мы копируем его, то кроме самого массива скопируются и объекты.

Пример функции:
Код:
import flash.utils.ByteArray;

function clone(source:Object):* {
    var copier:ByteArray = new ByteArray();
    copier.writeObject(source);
    copier.position = 0;
    return(copier.readObject());
}
Использование:
Код:
newObjectCopy = clone(originalObject);
Nirth: Информация о классе не сохраняется, но мы можем воспользоватся кастингом:
Код:
package {
	import flash.display.*;
	import flash.utils.*;

	dynamic public class Test extends Sprite
	{
		public function Test()
		{
			var user:UserInfo 	= new UserInfo();
				user.name     	= "David";
				user.email    	= "david@david.com";
				user.page	  	= new HomePage();
				user.page.title = "David";
				user.page.url	= "david.com";
				
			trace("user class name:",getQualifiedClassName(user));
			trace("user.page class name:",getQualifiedClassName(user.page));
			
			var user2:UserInfo = clone(user) as UserInfo;
			
			trace("user2 class name:",getQualifiedClassName(user));
			trace("user2.page class name:",getQualifiedClassName(user.page));
			
		}
		
		private function clone(source:Object):* {
		    var copier:ByteArray = new ByteArray();
		    copier.writeObject(source);
		    copier.position = 0;
		    return(copier.readObject());
		}
	}
}

class UserInfo
{
	internal var name:String;
	internal var email:String;
	internal var page:HomePage;
	
	public function UserInfo()
	{		
	}
}
class HomePage
{
	internal var url:String;
	internal var title:String;
	
	public function HomePage()
	{
	}	
}
Данный метод хорошо подходит для чистых DTO/VO объектов.
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^