public class PrototypeTest
{
public static void Test()
{
//如果不用克隆
{
Product product = new Product();
product.Name = "cpu";
Product copy = product;
copy.Name = "memory";
Console.WriteLine(product.Name);
Console.WriteLine(copy.Name);
}
//用克隆
{
Product product = new Product();
product.Name = "cpu";
Product copy = product.Clone() as Product;
copy.Name = "memory";
Console.WriteLine(product.Name);
Console.WriteLine(copy.Name);
}
}
/// <summary>
/// 支持克隆,将创建具有相同值的类的新实例
/// </summary>
public class Product : ICloneable
{
public string Name { get; set; }
public object Clone()
{
return new Product
{
Name = this.Name,
};
}
}
}
看结果
由于对象赋值是地址引用;所有改copy的值就是在改product的值;
如果使用clone()之后,会重新创建新的对象实例,虽然值是一样的但是改动copy是不会影响product的;
原文:https://www.cnblogs.com/sands/p/11460241.html