
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
184
|
Chapter 3: Classes and Structures
BF.Serialize(memStream, this);
memStream.Position = 0;
return (BF.Deserialize(memStream));
}
}
Add an overloaded Clone method to your class to allow for deep or shallow copying.
This method allows you to decide at runtime how your object will be copied. The
code might appear as follows:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
[Serializable]
public class MultiClone : ICloneable
{
public int data = 1;
public List<string> listData = new List<string>( );
public object objData = new object( );
public object Clone(bool doDeepCopy)
{
if (doDeepCopy)
{
BinaryFormatter BF = new BinaryFormatter( );
MemoryStream memStream = new MemoryStream( );
BF.Serialize(memStream, this);
memStream.Position = 0;
return (BF.Deserialize(memStream));
}
else
{
return (this.MemberwiseClone( ));
}
}
public object Clone( )
{
return (Clone(false));
}
}
Discussion
Cloning is the ability to make an exact copy (a clone) of an instance of a type. Clon-
ing may take one of two forms: a shallow copy or a deep copy. Shallow copying is
relatively easy. It involves copying the object that the
Clone method was called on.