欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解c# 深克隆與淺克隆

 更新時(shí)間:2020年07月09日 14:20:09   作者:團(tuán)隊(duì)buff工具人  
這篇文章主要介紹了c# 深克隆與淺克隆的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

前言

我們都知道m(xù)emberwiseclone 會(huì)將淺克隆。

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

正文

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;
}

測(cè)試:

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

這里我們得出了結(jié)果為9;

ok,那么這真的是個(gè)匪夷所思的問(wèn)題,明明兩個(gè)對(duì)象啊。

那么回歸到淺克隆上。

當(dāng)克隆good的時(shí)候是這樣的。

讓good的classone的引用給了新的克隆對(duì)象。

那么如何深克隆呢?

深克隆其實(shí)就是將對(duì)象序列化,也就是說(shuō)要深克隆的話必須對(duì)象系列化;

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<T>(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 t)
	{
		return Derializable<T>(Serializable(t));
	}
}

改變一個(gè)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;
}

測(cè)試一下:

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

以上就是詳解c# 深克隆與淺克隆的詳細(xì)內(nèi)容,更多關(guān)于c# 深克隆與淺克隆的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論