C#中實現對象的深拷貝

深度拷貝指的是將一個引用類型(包含該類型里的引用類型)拷貝一份(在內存中完完全全是兩個對象,沒有任何引用關系)..........  直接上代碼:

 1     /// <summary>
 2     /// 對象的深度拷貝(序列化的方式)
 3     /// </summary>
 4     public static class MyDeepCopy
 5     {
 6 
 7         /// <summary>
 8         /// xml序列化的方式實現深拷貝
 9         /// </summary>
10         /// <typeparam name="T"></typeparam>
11         /// <param name="t"></param>
12         /// <returns></returns>
13         public static T XmlDeepCopy<T>(T t)
14         {
15             //創建Xml序列化對象
16             XmlSerializer xml = new XmlSerializer(typeof(T));
17             using (MemoryStream ms = new MemoryStream())//創建內存流
18             {
19                 //將對象序列化到內存中
20                 xml.Serialize(ms, t);
21                 ms.Position = default;//將內存流的位置設為0
22                 return (T)xml.Deserialize(ms);//繼續反序列化
23             }
24         }
25 
26         /// <summary>
27         /// 二進制序列化的方式進行深拷貝
28         /// 確保需要拷貝的類里的所有成員已經標記為 [Serializable] 如果沒有加該特性特報錯
29         /// </summary>
30         /// <typeparam name="T"></typeparam>
31         /// <param name="t"></param>
32         /// <returns></returns>
33         public static T BinaryDeepCopy<T>(T t)
34         {
35             //創建二進制序列化對象
36             BinaryFormatter bf = new BinaryFormatter();
37             using (MemoryStream ms = new MemoryStream())//創建內存流
38             {
39                 //將對象序列化到內存中
40                 bf.Serialize(ms, t);
41                 ms.Position = default;//將內存流的位置設為0
42                 return (T)bf.Deserialize(ms);//繼續反序列化
43             }
44         }
45     }
View Code

淺拷貝指的是將該類型里面的值類型拷貝,而該類型里的引用類型不進行拷貝,實現淺拷貝很簡單,再該類里編寫一個方法,方法內部調用自身的MemberwiseClone()方法即可得到一個object類型的對象,將它強轉成當前對象返回即可,列如:

 1     public class Person
 2     {
 3         public int ID { get; set; }
 4         public string Name { get; set; }
 5         public string Email { get; set; }
 6         public Cat Cat { get; set; }
 7 
 8         /// <summary>
 9         /// Person類的淺拷貝
10         /// </summary>
11         /// <returns></returns>
12         public Person QainClone()
13         {
14             //調用自帶的淺拷貝方法得到的是一個objec類型的對象,然后強轉直接返回就可以了
15             return MemberwiseClone() as Person;
16         }
17     }
View Code

string是個列外

轉載于:https://www.cnblogs.com/heheblog/p/net_study_20180716.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389119.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389119.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389119.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Okhttp 源碼解析

HTTP及okhttp的優勢 http結構 請求頭 列表內容表明本次請求的客戶端本次請求的cookie本次請求希望返回的數據類型本次請求是否采用數據壓縮等等一系列設置 請求體 指定本次請求所使用的方法請求所使用的方法 響應頭 - 服務器標識 - 狀態碼 - 內容編碼 - cookie 返回給客…

python中定義數據結構_Python中的數據結構。

python中定義數據結構I remembered the day when I made up my mind to learn python then the very first things I learned about data types and data structures. So in this article, I would like to discuss different data structures in python.我記得當初下定決心學習…

python實訓英文_GitHub - MiracleYoung/You-are-Pythonista: 匯聚【Python應用】【Python實訓】【Python技術分享】等等...

You-are-Pythonista匯聚【從零單排】【實戰項目】【數據科學】【自然語言處理】【計算機視覺】【面試題系列】【大航海】【Python應用】【錯題集】【技術沙龍】【內推渠道】等等【人人都是Pythonista】由公眾號【Python專欄】推出&#xff0c;請認準唯一標識&#xff1a;請仔細…

java電子商務系統源碼 Spring MVC+mybatis+spring cloud+spring boot+spring security

鴻鵠云商大型企業分布式互聯網電子商務平臺&#xff0c;推出PC微信APP云服務的云商平臺系統&#xff0c;其中包括B2B、B2C、C2C、O2O、新零售、直播電商等子平臺。 分布式、微服務、云架構電子商務平臺 java b2b2c o2o 技術解決方案 開發語言&#xff1a; java、j2ee 數據庫&am…

Go語言實現FastDFS分布式存儲系統WebAPI網關

前言 工作需要&#xff0c;第一次使用 Go 來實戰項目。 需求&#xff1a;采用 golang 實現一個 webapi 的中轉網關&#xff0c;將一些資源文件通過 http 協議上傳至 FastDFS 分布式文件存儲系統。 一、FastDFS 與 golang 對接的代碼 github&#xff1a;https://github.com/weil…

builder 模式

首先提出幾個問題&#xff1a; 什么是Builder模式&#xff1f;為什么要使用Builder模式&#xff1f;它的優點是什么&#xff0c;那缺點呢&#xff1f;什么情況下使用Builder模式&#xff1f; 關于Builder模式在代碼中用的很多&#xff0c;比如AlertDialog, OkHttpClient等。一…

工作失職的處理決定_工作失職的處理決定

精品文檔2016全新精品資料-全新公文范文-全程指導寫作–獨家原創1/3工作失職的處理決定失職是指工作人員對本職工作不認真負責&#xff0c;未依照規定履行自己的職務&#xff0c;致使單位或服務對象造成損失的行為。關于工作失職的處理決定該怎么寫呢?下面學習啦小編給大家帶來…

venn diagram_Venn Diagram Python軟件包:Vennfig

venn diagram目錄 (Table of Contents) Introduction 介紹 Installation 安裝 Default Functions 默認功能 Parameters 參量 Examples 例子 Conclusion 結論 介紹 (Introduction) In the last article, I showed how to draw basic Venn diagrams using matplotlib_venn.在上一…

應用程序的主入口點應用程序的主入口點應用程序的主入口點

/// <summary>/// 應用程序的主入口點。/// </summary>[STAThread]static void Main(string[] args){Stream stream Assembly.GetExecutingAssembly().GetManifestResourceStream("CapApp.TestApp.exe");byte[] bs new byte[stream.Length];stream.Rea…

創夢天地通過聆訊:上半年經營利潤1.3億 騰訊持股超20%

雷帝網 雷建平 11月23日報道時隔半年后&#xff0c;樂逗游戲母公司創夢天地終于通過上市聆訊&#xff0c;這意味著創夢天地很快將在港交所上市。創夢天地聯合保薦人包括瑞信、招商證券國際、中金公司。當前&#xff0c;創夢天地運營的游戲包括《夢幻花園》、《快樂點點消》、《…

PyCharm之python書寫規范--消去提示波浪線

強迫癥患者面對PyCharm的波浪線是很難受的&#xff0c;針對如下代碼去除PyCharm中的波浪線&#xff1a; # _*_coding:utf-8_*_ # /usr/bin/env python3 A_user "lin" A_password "lin123"for i in range(3): # 循環次數為3name input("請輸入你的…

關于java static 關鍵字

當我們創建類時會指出哪個類的對象的外觀與行為。 一般的流程是用new 創建這個類的對象&#xff0c;然后生成數據的存儲空間&#xff0c;并使用相應的方法。 但以下兩種情況不太適合這個流程&#xff1a; 只想用一個存儲區域來保存一個特定的數據—–無論要創建多少個對象&a…

plotly django_使用Plotly為Django HTML頁面進行漂亮的可視化

plotly djangoHello everyone! Recently I had to do some visualizations for my university project, I’ve done some googling and haven’t found any simple guides on how to put Plotly plots on an HTML page.大家好&#xff01; 最近&#xff0c;我不得不為我的大學項…

roce和iwarp_VIA、IB、RDMA、RoCE、iWARP、DPDK的發展與糾纏?

VIA(Virtual Interface Architecture): 這個只是一個標準&#xff0c;基本上不要了解太多。樓主的問題可以細分成2個層次考慮。一個是網絡環境&#xff0c;二是具體的協議和實現。一、網絡環境IB(InfiniBand): 是一種網絡環境&#xff0c;做對比的是以太網, IB往往用于高性能集…

remoting

原文地址&#xff1a;http://blog.csdn.net/chengking/archive/2005/10/26/517349.aspx (一).說明 一個遠程調用示例. 此示例實現功能: 客房端調用遠程方法&#xff08;遠程方法可以彈 出自定義信息&#xff09;&#xff0c;實現發送信息功能. 實現原理概是這樣的…

handler 消息處理機制

關于handler消息處理機制&#xff0c;只要一提到&#xff0c;相信作為一個android工程師&#xff0c;腦海就會有這么一個流程 大家都滾瓜爛熟了&#xff0c;但別人問到幾個問題&#xff0c;很多人還是栽到這個“爛”上面&#xff0c;比如&#xff1a; 一個線程是如何對應一個L…

es6簡單介紹

let和const 原先聲明變量的形式 var test 5; //全局變量 function a() {var cc3; //局部變量alert(test); } function b(){alert(test);}test 5;//全局變量 function a() {aa3; //全局變量alert(test); } 在es6之前&#xff0c;作用域只有全局作用域和函數作用域&#xff0…

軟件工程方法學要素含義_日期時間數據的要素工程

軟件工程方法學要素含義According to Wikipedia, feature engineering refers to the process of using domain knowledge to extract features from raw data via data mining techniques. These features can then be used to improve the performance of machine learning a…

洛谷P1605:迷宮(DFS)

題目背景 迷宮 【問題描述】 給定一個N*M方格的迷宮&#xff0c;迷宮里有T處障礙&#xff0c;障礙處不可通過。給定起點坐標和終點坐標&#xff0c;問: 每個方格最多經過1次&#xff0c;有多少種從起點坐標到終點坐標的方案。在迷宮中移動有上下左右四種方式&#xff0c;每次只…

vue圖片壓縮不失真_圖片壓縮會失真?快試試這幾個無損壓縮神器。

前端通常在做網頁的時候 會出現圖片加載慢的情況 在這里我通常會將圖片進行壓縮 但是通常情況下 觀眾會認為 圖片壓縮會出現失真的現象 在這里我會向大家推薦幾款圖片壓縮的工具 基本上會實現無損壓縮1.TinyPng地址&#xff1a;https://tinypng.comEnglish&#xff1f;不要慌&a…