1)实现Clone()接口,比较复杂,但是很快。
举例:using System;
class Copy : ICloneable
{
int m_nValue;
public Copy(int nValue)
{
m_nValue = nValue;
}
public object Clone()
{
Copy c = new Copy(this.m_nValue);
return c;
}
public void Show()
{
Console.WriteLine(m_nValue);
}
}
class CopyTest
{
int m_nValue;
public CopyTest(int nValue)
{
m_nValue = nValue;
}
public CopyTest(CopyTest ct)
{
m_nValue = ct.m_nValue ;
}
public void Show()
{
Console.WriteLine(m_nValue);
}
public static void Main()
{
Console.WriteLine("Using Clone:");
Copy c = new Copy(789);
c.Show();
Copy c2 = (Copy)c.Clone();
c2.Show();
Console.WriteLine("Using Copy constructor:");
CopyTest ct = new CopyTest(456);
ct.Show();
CopyTest ct2 = new CopyTest(ct);
ct2.Show();
}
}
2)用序列化,实现简单,但是速度相对慢。
举例:
public static object CloneObject(object obj)
{
using(MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
stream.Position = 0;
formatter.Serialize(stream, obj);
stream.Position = 0;
return formatter.Deserialize(stream);
}
}