亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#淺拷貝和深拷貝實例解析

2020-01-24 02:32:13
字體:
來源:轉載
供稿:網友

在有些時候,我們需要從數據庫讀取數據填充對象或從硬盤讀取文件填充對象,但是這樣做相對耗時。這時候我們就想到了對象的拷貝。本文即以實例形式解析了C#淺拷貝和深拷貝的用法。具體如下:

一、淺拷貝

1.什么是"淺拷貝":

當針對一個對象前拷貝的時候,對于對象的值類型成員,會復制其本身,對于對象的引用類型成員,僅僅復制對象引用,這個引用指向托管堆上的對象實例。

2.有一個對象,包含引用類型的類成員和值類型的struct成員

Cinema包含引用類型成員Room和值類型成員Film。

  public class Room  {    public int _maxSeat;     public Room(int maxSeat)    {      this._maxSeat = maxSeat;    }  }   public struct Film  {    public string _name;     public Film(string name)    {      this._name = name;    }  }   public class Cinema  {    public Room _room;    public Film _film;     public Cinema(Room room, Film film)    {      this._room = room;      this._film = film;    }     public object Clone()    {      return MemberwiseClone(); //對引用類型實施淺復制    }  } 

3.測試拷貝后的效果

①打印出原先對象拷貝前值類型和引用類型成員的值
②對原先對象拷貝,打印出復制對象值類型和引用類型成員的值
③改變原先對象的值,再次打印原先對象的值類型和引用類型成員的值
④再次打印復制對象值類型和引用類型成員的值

static void Main(string[] args){  Room room1 = new Room(60);  Film film1 = new Film("家園防線");  Cinema cinema1 = new Cinema(room1, film1);  Cinema cinema2 = (Cinema)cinema1.Clone();  Console.WriteLine("拷貝之前,結構成員的字段值為{0},引用類型成員的字段值為{1}", cinema1._film._name,cinema1._room._maxSeat);  Console.WriteLine("拷貝之后,新的結構成員的字段值為{0},引用類型成員的字段值為{1}", cinema2._film._name, cinema2._room._maxSeat);  //修改拷貝之前引用類型的字段值  cinema1._film._name = "極品飛車";  cinema1._room._maxSeat = 80;  Console.WriteLine("修改之后,結構成員的字段值為{0},引用類型成員的字段值為{1}", cinema1._film._name, cinema1._room._maxSeat);  Console.WriteLine("修改之后,新的結構成員的字段值為{0},引用類型成員的字段值為{1}", cinema2._film._name, cinema2._room._maxSeat);  Console.ReadKey();}

運行結果如下:

分析:

淺拷貝關鍵點是對引用類型拷貝的是對象引用,這個引用指向托管堆上的對象實例。改變原對應引用類型的值,會影響到復制對象。

二、深拷貝

1.什么是"深拷貝"

對引用成員指向的對象也進行復制,在托管堆上賦值原先對象實例所包含的數據,再在托管堆上創建新的對象實例。

2.通過對每個對象成員進行復制進行深拷貝

    public object Clone()    {      Room room = new Room();      room._maxSeat = this._room._maxSeat;//復制當前引用類型成員的值到新對象       Film film = this._film; //值類型直接賦值      Cinema cinema = new Cinema(room, film);      return cinema;    }
 

3.也可以通過序列化和反序列化進行深拷貝

    public object Clone1()    {      BinaryFormatter bf = new BinaryFormatter();      MemoryStream ms = new MemoryStream();      bf.Serialize(ms, this); //復制到流中      ms.Position = 0;      return (bf.Deserialize(ms));    }

4.采用序列化和反序列化深拷貝,但必須把所有的類打上[Serializable],測試代碼如下:

  [Serializable]  public class Room  {    public int _maxSeat;     public Room()    {}     public Room(int maxSeat)    {      this._maxSeat = maxSeat;    }  }   [Serializable]  public struct Film  {    public string _name;     public Film(string name)    {      this._name = name;    }  }   [Serializable]  public class Cinema  {    public Room _room;    public Film _film;     public Cinema(Room room, Film film)    {      this._room = room;      this._film = film;    }     //淺拷貝    //public object Clone()    //{    //  return MemberwiseClone(); //對引用類型實施淺復制    //}     //深拷貝 對每個對象成員進行復制    public object Clone()    {      Room room = new Room();      room._maxSeat = this._room._maxSeat;//復制當前引用類型成員的值到新對象       Film film = this._film; //值類型直接賦值      Cinema cinema = new Cinema(room, film);      return cinema;    }     //使用序列化和反序列化進行復制    public object Clone1()    {      BinaryFormatter bf = new BinaryFormatter();      MemoryStream ms = new MemoryStream();      bf.Serialize(ms, this); //復制到流中      ms.Position = 0;      return (bf.Deserialize(ms));    }  }

5.測試拷貝后的效果

①打印出原先對象拷貝前值類型和引用類型成員的值
②對原先對象拷貝,打印出復制對象值類型和引用類型成員的值
③改變原先對象的值,再次打印原先對象的值類型和引用類型成員的值
④再次打印復制對象值類型和引用類型成員的值

 static void Main(string[] args)    {      Room room1 = new Room(60);      Film film1 = new Film("家園防線");      Cinema cinema1 = new Cinema(room1, film1);      Cinema cinema2 = (Cinema)cinema1.Clone1();      Console.WriteLine("拷貝之前,結構成員的字段值為{0},引用類型成員的字段值為{1}", cinema1._film._name,cinema1._room._maxSeat);       Console.WriteLine("拷貝之后,新的結構成員的字段值為{0},引用類型成員的字段值為{1}", cinema2._film._name, cinema2._room._maxSeat);       //修改拷貝之前引用類型的字段值      cinema1._film._name = "極品飛車";      cinema1._room._maxSeat = 80;       Console.WriteLine("修改之后,結構成員的字段值為{0},引用類型成員的字段值為{1}", cinema1._film._name, cinema1._room._maxSeat);      Console.WriteLine("修改之后,新的結構成員的字段值為{0},引用類型成員的字段值為{1}", cinema2._film._name, cinema2._room._maxSeat);       Console.ReadKey();    }

結果:

 

分析:

深拷貝后,兩個對象的引用成員已經分離,改變原先對象引用類型成員的值并不會對復制對象的引用類型成員值造成影響。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频专区| 亚洲免费精彩视频| 久久这里只有精品视频首页| 日韩av影视综合网| 久99九色视频在线观看| 成人免费网站在线| 成人午夜在线视频一区| 日本国产精品视频| 亚洲国产欧美一区二区三区久久| 欧美美女18p| 亚洲的天堂在线中文字幕| 一区二区三区 在线观看视| 成人欧美一区二区三区黑人孕妇| 欧美成人免费网| 精品国产户外野外| 亚洲二区中文字幕| 日韩亚洲欧美中文高清在线| 亚洲天堂网在线观看| 亚洲一区二区三区视频| 欧美精品做受xxx性少妇| 美女视频黄免费的亚洲男人天堂| 亚洲精品美女视频| 岛国精品视频在线播放| 久久精品国产精品| www国产精品视频| 国产精品情侣自拍| 91九色精品视频| 懂色av影视一区二区三区| 国产玖玖精品视频| 97香蕉超级碰碰久久免费软件| 国产精品69精品一区二区三区| 亚洲天堂av综合网| 精品亚洲国产成av人片传媒| 91精品国产91久久久久| 国产精品视频久久| 久久成人这里只有精品| 色与欲影视天天看综合网| 欧美电影免费观看高清完整| 日韩av片免费在线观看| 国产精品毛片a∨一区二区三区|国| 国产精品成人一区二区三区吃奶| 欧美亚洲另类激情另类| 欧美激情xxxxx| 亚洲午夜久久久影院| 91久久精品国产| 国产精品igao视频| 欧美成年人网站| 丝袜情趣国产精品| 国产成人精品一区二区三区| 亚洲乱亚洲乱妇无码| 亚洲另类激情图| 精品电影在线观看| 欧美视频13p| 91精品国产91久久久| 国产久一一精品| 成人女保姆的销魂服务| 欧美日韩性视频在线| 自拍偷拍亚洲一区| 色樱桃影院亚洲精品影院| 98精品国产高清在线xxxx天堂| 影音先锋欧美精品| 亚洲精品免费av| 日韩免费观看在线观看| 黑人巨大精品欧美一区二区免费| 91精品在线国产| 日韩美女激情视频| 在线电影欧美日韩一区二区私密| 欧美激情一区二区三区在线视频观看| 欧美亚洲在线视频| 国外成人在线视频| 国产精品色午夜在线观看| 美日韩精品视频免费看| 精品小视频在线| 最近2019中文字幕在线高清| 欧美日韩成人在线播放| 国产精品九九久久久久久久| 91国内产香蕉| 欧美精品亚州精品| 亚洲一区二区久久久| 日韩精品免费在线播放| 国产v综合ⅴ日韩v欧美大片| 在线性视频日韩欧美| 亚洲精品视频播放| 亚洲自拍偷拍在线| 亚洲欧美色婷婷| 日韩在线观看免费av| 亚洲性日韩精品一区二区| 91精品国产一区| 91久久精品国产91久久| 欧美亚洲另类制服自拍| 日韩精品免费在线| 欧美日韩中文字幕| 国产精品美女在线观看| 亚洲男子天堂网| 亚洲国产另类 国产精品国产免费| 国产一区二区成人| 欧美www视频在线观看| 韩日欧美一区二区| 久久手机精品视频| 亚洲成成品网站| 亚洲人精选亚洲人成在线| 国产日韩在线亚洲字幕中文| 久久国产精品影视| 亚洲风情亚aⅴ在线发布| 欧美激情啊啊啊| 亚洲最大的成人网| 亚洲精品999| 亚洲女人天堂av| 欧美美女15p| 亚洲jizzjizz日本少妇| 5566日本婷婷色中文字幕97| 日韩精品高清在线观看| 国产成人精品久久久| 久久五月天色综合| 国产精品草莓在线免费观看| 中日韩美女免费视频网站在线观看| 欧美午夜宅男影院在线观看| 91产国在线观看动作片喷水| 2024亚洲男人天堂| 国内偷自视频区视频综合| 亚洲护士老师的毛茸茸最新章节| 国产v综合ⅴ日韩v欧美大片| 色诱女教师一区二区三区| 亚洲xxxx视频| 日韩最新av在线| 日韩最新中文字幕电影免费看| 免费不卡在线观看av| 91中文精品字幕在线视频| 亚洲欧美色图片| 国产主播喷水一区二区| 在线视频亚洲欧美| 欧美视频一二三| 欧美精品在线播放| 欧美最顶级丰满的aⅴ艳星| 亚洲第一在线视频| 国产丝袜一区二区三区| 亚洲综合精品一区二区| 亚洲剧情一区二区| 欧美成人三级视频网站| 亚洲国产精品成人va在线观看| 国产69精品99久久久久久宅男| 亚洲区免费影片| 亚洲乱码国产乱码精品精| 欧美一级成年大片在线观看| 欧美日韩国产激情| 欧美巨乳在线观看| 国产精品女视频| 欧美日韩国产麻豆| 92福利视频午夜1000合集在线观看| 亚洲精品电影在线观看| 成人精品在线观看| 亚洲欧美日韩综合| 在线成人中文字幕| 成人激情免费在线| 久久伊人免费视频| 欧美激情中文字幕乱码免费| 91免费看国产| 欧美日韩国产专区| 爱福利视频一区| 国产精品久久久久久久久久免费| 亚洲韩国欧洲国产日产av| 日韩精品中文在线观看| 久久久97精品| 人人澡人人澡人人看欧美|