class CloneExample : ICloneable
{
private int m_data ;
private double m_data2 ;
public object Clone()
{
return this.MemberwiseClone();
}
public CloneExample()
{
}
public CloneExample(int data1, int data2)
{
m_data = data1;
m_data2 = data2;
}
public override string ToString()
{
return String.Format("[d1,d2] {0} {1}", m_data, m_data2);
}
}
class Program
{
static void Main(string[] args)
{
CloneExample aEx = new CloneExample(10,20);
CloneExample aEx2 = (CloneExample)aEx.Clone();
Console.WriteLine("the first object value is {0}", aEx.ToString());
Console.WriteLine("the first object value is {0}", aEx2.ToString());
Console.Read();
}
}
答案 0 :(得分:5)
Memberwiseclone 首先使用 Activator.CreateInstance 创建实例,然后迭代该类型中的所有字段并将值设置为相应的成员/字段。
但我宁愿根本不使用ICloneable。如果我需要使用克隆,我使用BinaryFormatter序列化对象图,然后反序列化它,以便我得到新的深度克隆的实例。
答案 1 :(得分:1)
即使您未指定,每个对象都继承自“对象”。 所以它是there。
答案 2 :(得分:1)
MemberwiseClone
的默认实现来自.NET中的Object类。
MemberwiseClone方法使用反射来完成工作。
答案 3 :(得分:0)
这是由基类Object提供的。查看文档here。