using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace _5_14
{
public class DeepCopyUtility
{
public static void Main()
{
Region obj = new Region("Reg 1");
Console.WriteLine(obj);
Region copiedobj = (Region)DeepCopy(obj);
Console.WriteLine(copiedobj);
Console.WriteLine(obj == copiedobj);
}
public static object DeepCopy(object o)
{
Stream stream = null;
try
{
stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, o);
stream.Position = 0;
return formatter.Deserialize(stream);
}
finally
{
stream.Close();
}
}
}
[Serializable()]
public class Region
{
ArrayList forests;
public string name;
public Region(string name)
{
this.name = name;
forests = new ArrayList();
for (int i = 0; i < 2; i++)
forests.Add(new Forest("Forest"+i));
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("Region ").Append(name).Append(" has followingforests\n");
for (int i = 0; i < forests.Count; i++)
{
sb.Append(forests[i].ToString()).Append("bsn");
}
return sb.ToString();
}
}
[Serializable()]
public class Forest
{
ArrayList trees;
string name;
public Forest(string name)
{
this.name = name;
trees = new ArrayList();
for (int i = 0; i < 3; i++)
trees.Add(new Tree("Tree"+i));
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("\t").Append("Forset ").Append(name).Append(" has following trees\n");
for (int i = 0; i < trees.Count; i++)
{
sb.Append(trees[i].ToString()).Append("\n");
}
return sb.ToString();
}
}
[Serializable()]
public class Tree
{
ArrayList leaves;
string name;
public Tree(string name)
{
this.name = name;
leaves = new ArrayList();
for (int i = 0; i < 10; i++)
leaves.Add(new Leaf("Leaf"+i));
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append("\t\t").Append("Tree ").Append(name).Append(" has following leaves\n");
for (int i = 0; i < leaves.Count; i++)
{
sb.Append(leaves[i].ToString()).Append("\n");
}
return sb.ToString();
}
}
[Serializable]
public class Leaf
{
string name;
public Leaf(string name)
{
this.name = name;
}
public override string ToString()
{
return name;
}
}
}
评论