国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

[C#]對象深拷貝

2019-11-14 16:31:54
字體:
來源:轉載
供稿:網友

關鍵代碼:

        /// <summary>        /// 對象深拷貝        /// </summary>        /// <typeparam name="T">泛型</typeparam>        /// <param name="obj">Object</param>        /// <returns>Object</returns>        public static T DeepCopy<T>(this T obj)        {            /*             *相關知識:             *C# 支持兩種類型:“值類型”和“引用類型”。              *值類型(Value Type)(如 char、int 和 float)、枚舉類型和結構類型。              *引用類型(Reference Type) 包括類 (Class) 類型、接口類型、委托類型和數組類型。              *如何來劃分它們?             *以它們在計算機內存中如何分配來劃分             *1,值類型的變量直接包含其數據。             *2,引用類型的變量則存儲對象引用。             *對于引用類型,兩個變量可能引用同一個對象,因此對一個變量的操作可能影響另一個變量所引用的對象。             *對于值類型,每個變量都有自己的數據副本,對一個變量的操作不可能影響另一個變量。             *             *堆棧(stack)是一種先進先出的數據結構,在內存中,變量會被分配在堆棧上來進行操作。             *堆(heap)是用于為類型實例(對象)分配空間的內存區域,在堆上創建一個對象,會將對象的地址傳給堆棧上的變量(反過來叫變量指向此對象,或者變量引用此對象)。             *             *淺拷貝:是指將對象中的所有字段逐字復雜到一個新對象             *對值類型字段只是簡單的拷貝一個副本到目標對象,改變目標對象中值類型字段的值不會反映到原始對象中,因為拷貝的是副本。             *對引用型字段則是指拷貝他的一個引用到目標對象。改變目標對象中引用類型字段的值它將反映到原始對象中,因為拷貝的是指向堆是上的一個地址。             *             *深拷貝:深拷貝與淺拷貝不同的是對于引用字段的處理,深拷貝將會在新對象中創建一個新的對象和             *原始對象中對應字段相同(內容相同)的字段,也就是說這個引用和原始對象的引用是不同, 我們改變新             *對象中這個字段的時候是不會影響到原始對象中對應字段的內容。             *             *淺復制: 實現淺復制需要使用Object類的MemberwiseClone方法用于創建一個淺表副本             *深復制: 須實現 ICloneable接口中的Clone方法,且需要需要克隆的對象加上[Serializable]特性             *以上參考:http://m.survivalescaperooms.com/huangting2009/archive/2009/03/13/1410634.html             */            if (!typeof(T).IsSerializable)            {                throw new ArgumentException(string.Format("該類型:{0}不支持序列化", typeof(T).FullName), "obj");            }            if (obj == null)            {                return default(T);            }            IFormatter _formatter = new BinaryFormatter();            using (Stream stream = new MemoryStream())            {                _formatter.Serialize(stream, obj);                stream.Seek(0, SeekOrigin.Begin);                return (T)_formatter.Deserialize(stream);            }        }
希望有所幫助!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇远县| 怀远县| 拜城县| 万源市| 家居| 鸡东县| 石首市| 佛坪县| 恭城| 枣阳市| 枞阳县| 灵台县| 彭州市| 晋中市| 海宁市| 曲麻莱县| 西乌| 囊谦县| 遂平县| 通城县| 哈巴河县| 油尖旺区| 南郑县| 马鞍山市| 五河县| 荣昌县| 万年县| 惠水县| 田东县| 赞皇县| 普陀区| 依安县| 比如县| 丽江市| 海林市| 昆明市| 余干县| 浦北县| 泰宁县| 星子县| 肥西县|