栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

详解c# 深克隆与浅克隆

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

详解c# 深克隆与浅克隆

前言

我们都知道memberwiseclone 会将浅克隆。

什么是浅克隆?如何深克隆呢?

正文

public class good{
  private good(){
    oneclass=new class{
      int id=8;
      string name='id';
    }
  }
  private static good __good;
  private static good __good=new good();
  public good createinstance()
  {
    return __good.memberwiseclone();
  }
  public int a=0;

  public string b="ab";

  pulic class oneclass;
}

测试:

void main()
{
  var student1=good.createinstance();
  var student2=good.createinstance();
  student1.oneclass.id=9;
  console.log('student2 oneclass.id{0}',student2.oneclass.id);
}

这里我们得出了结果为9;

ok,那么这真的是个匪夷所思的问题,明明两个对象啊。

那么回归到浅克隆上。

当克隆good的时候是这样的。

让good的classone的引用给了新的克隆对象。

那么如何深克隆呢?

深克隆其实就是将对象序列化,也就是说要深克隆的话必须对象系列化;

public class SerializeHelper
{
	public static string Serializable(object target)
	{
		using (MemoryStream steam=new MemoryStream())
		{
			new BinaryFormatter().Serialize(steam,target);
			return Convert.Tobase64String(steam.ToArray());
		}
	}
	public static T Derializable(string target)
	{
		byte[] targetArray = Convert.Frombase64String(target);
		using (MemoryStream steam =new MemoryStream(targetArray))
		{
			return (T)(new BinaryFormatter().Deserialize(steam));
		}
	}
	public static T DeepClone(T t)
	{
		return Derializable(Serializable(t));
	}
}

改变一个good 类。

public class good{
  private good(){
    oneclass=new class{
      int id=8;
      string name='id';
    }
  }
  private static good __good;
  private static good __good=new good();
  public good createinstance()
  {
    return SerializeHelper.DeepClone(__good.memberwiseclone());
  }
  public int a=0;

  public string b="ab";

  pulic class oneclass;
}

测试一下:

void main()
{
  var student1=good.createinstance();
  var student2=good.createinstance();
  student1.oneclass.id=9;
  console.log('student2 oneclass.id{0}',student2.oneclass.id);
}

以上就是详解c# 深克隆与浅克隆的详细内容,更多关于c# 深克隆与浅克隆的资料请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/121972.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号