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; } } }

评论