天天看點

轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]

<script type="text/javascript"> </script> <script type="text/javascript" src="http://blog.joycode.com/WebResource.axd?d=o6m_bonedRmjjNzfF-Dv7Q2&t=633198064017968750"></script> <script type="text/javascript" src="http://blog.joycode.com/WebResource.axd?d=7idN8sjV8Q-YJNS2N2Jtx26uXOqZHr9KMGYoDl9Okn41&t=633198064017968750"></script> <script type="text/javascript"> </script>

JGTM'2007 [MVP]

Bridging the virtual world and the real world...
随筆 - 36 , 評論 - 447 , 引用 - 14, articles - 8

導航

  • 首頁
  • 聯系
  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
  • 登入

公告

歡迎來信咨詢、探讨任何您覺得我會感興趣或者我能幫得上忙的話題!隻是最近工作繁忙,若未能及時回複您的郵件,還望見諒!謝謝!:)

文章分類

  • .NET
  • 先睹為快
  • 特約稿件

存檔

  • 2006年1月 (1)
  • 2004年12月 (1)
  • 2004年9月 (2)
  • 2004年8月 (2)
  • 2004年4月 (3)
  • 2004年3月 (2)
  • 2004年2月 (5)
  • 2004年1月 (4)
  • 2003年12月 (15)
  • 2003年11月 (1)

随筆分類

  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    .NET Stuffs
  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    Agile/XP
  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    General

相冊

  • TEMP

Blogs I Read

  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    Chris's insight outlet
  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    Martin Fowler's Bliki
  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    Paul Wilson
  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    Robert C. Martin
  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    Steve Eichert
  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    冰雲@NonaStudio
  • 轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
    栖于流光

C# .NET Tips: Deep Cloning an Object

2003年12月1日 22:01 - (閱讀:5391;評論:9)

下面的工具函數可以構造source對象的deep copy,很有用!不妨一試

轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]

using System.IO;

using System.Runtime.Serialization.Binary;

public object static DeepClone(object source)

{

? if (source==null) return null;

? using (MemoryStream stream = new MemoryStream())

? {

??? BinaryFormatter?formatter = new BinaryFormatter();

??? formatter.Serialize(stream, source);

??? stream.Position = 0;

??? return?formatter.Deserialize(stream);

? }

}

回報

# 回複: C# .NET Tips: Deep Cloning an Object

2003-12-1 22:07 by mic 原來這樣都可以,學到了:)

# 回複: C# .NET Tips: Deep Cloning an Object

2003-12-2 8:26 by kkwoof

object預設的clone是shallow copy :(

# 回複: C# .NET Tips: Deep Cloning an Object

2003-12-2 9:44 by JGTM'2003 @sam111:

Nice translation and expansion. In this tip I just shown an easy way to implement object cloning by means of "binary serialization". And because binary serialization is kind of deep serialization, the result is a deep cloned object graph. Thanks for your article for us all.

@kkwoof:

System.Object has a "protected" (but non-virtual) method called MemberwiseClone which is implemented to make a "shallow clone" of any object instance. Since the method is "protected", you need a way to "public"-ize the functionality by some means, say, IClonable or any public method. But if you wanna expose the fully recursively (I mean, deep) cloning functionality to the outside, this tip will be your first aid. :)

# 回複: C# .NET Tips: Deep Cloning an Object

2003-12-2 10:21 by kkwoof sam111,請教一個問題:

BinaryFormatter和SoapFormatter以及.NET Remoting都使用Deep Serialization技術,。。。。。。。。。

你這裡所說的deep,是不是說對哪些沒有手工實作Iclonable的類?

如果自己實作了getobjectdata(),那麼BinaryFormatter 還會

做深度的序列化嗎?

# 回複: C# .NET Tips: Deep Cloning an Object

2003-12-2 13:51 by 開心就好 To JGTM:

上周你似乎詢問過我,你應該寫什麼體裁的随筆,不過那時候沒有什麼概念,現在看了你在我的随筆以及别人随筆後的評論,我想我已經有思路了。

你可以虛拟一個團隊,共同開發一個項目,這個項目最好通用一些,比如論壇的開發,然後就架構設計、實體類粒度等等來寫一系列的随筆。以“講故事”的方式給大家闡述一下你心目中完美的.NET的開發,從團隊、技術、人員上等等來描述,不牽涉到人為因素。

在最後,你還可以再闡述一下在項目進度的壓力下,如何簡化開發模型,使開發即可以可控,又可以适應更快速開發的要求:D

不知道意下如何?

MSN上不去,沒有辦法跟你說了:D

# 回複: C# .NET Tips: Deep Cloning an Object

2003-12-2 16:35 by sam1111 hehe, your answer is very great:)

# re: C# .NET Tips: Deep Cloning an Object

2004-12-10 9:15 by wdf public object static DeepClone(object source)

說source不支援Serialization,是怎麼回事?

Post Comment

主題 主題不能為空
姓名 姓名不能為空
首頁
校驗碼
轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
請輸入校驗碼!
内容  評論内容不能為空
記住我的資訊
<script type="text/javascript" src="http://www.google-analytics.com/urchin.js"> </script> <script type="text/javascript"> _uacct = "UA-247852-1"; urchinTracker(); </script>
Powered by:
轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
轉載:C# .NET Tips: Deep Cloning an ObjectJGTM'2007 [MVP]
Copyright © JGTM'2007 [MVP]

<script type="text/javascript"> </script> <script type="text/javascript"> </script> <script type="text/javascript"> </script>