日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

ASP.NET堆和棧三之引用類型對象拷貝和內(nèi)存分配

瀏覽:373日期:2022-06-08 14:52:39

".NET的堆和棧"系列:

在" ASP.NET堆和棧一之基本概念和值類型內(nèi)存分配"中,了解了"堆"和"棧"的基本概念,以及值類型的內(nèi)存分配。我們知道:當(dāng)執(zhí)行一個方法的時候,值類型實例會在"棧"上分配內(nèi)存,而引用類型實例會在"堆"上分配內(nèi)存,當(dāng)方法執(zhí)行完畢,"棧"上的實例由操作系統(tǒng)自動釋放,"堆"上的實例由.NET Framework的GC進(jìn)行回收。

在" ASP.NET堆和棧二之值類型和引用類型參數(shù)傳遞和內(nèi)存分配"中,我們了解了值類型參數(shù)和引用類型參數(shù)在傳遞時的內(nèi)存分配情況。

而本篇的重點要放在:引用類型對象拷貝以及內(nèi)存分配。

引用類型對象拷貝 成員都是值類型

public struct Shoe{    public string Color;} public class Dude{    public string Name;    public Shoe RightShoe;    public Shoe LeftShoe;        public Dude CopyDude()    {Dude newPerson = new Dude();newPerson.Name = Name;newPerson.LeftShoe = LeftShoe;newPerson.RightShoe = RightShoe; return newPerson;    }         public override string ToString()    {return (Name + " : Dude!, I have a " + RightShoe.Color  +" shoe on my right foot, and a " +LeftShoe.Color + " on my left foot.");    } }public static void Main(){    Dude Bill = new Dude();    Bill.Name = "Bill";    Bill.LeftShoe = new Shoe();    Bill.RightShoe = new Shoe();    Bill.LeftShoe.Color = Bill.RightShoe.Color = "Blue";         Dude Ted =  Bill.CopyDude();    Ted.Name = "Ted";    Ted.LeftShoe.Color = Ted.RightShoe.Color = "Red";         Console.WriteLine(Bill.ToString());    Console.WriteLine(Ted.ToString());    }

輸出結(jié)果:
Bill : Dude!, I have a Red shoe on my right foot, and a Red on my left foot
Ted : Dude!, I have a Red shoe on my right foot, and a Red on my left foot

以上,當(dāng)引用類型的屬性、成員都是值類型的時候,拷貝是完全拷貝。

引用類型對象拷貝 包含引用類型成員

把Shoe由struct值類型改成引用類型class。

public class Shoe{    public string Color;}

再次運行,輸出結(jié)果:
Bill : Dude!, I have a Red shoe on my right foot, and a Red on my left foot
Ted : Dude!, I have a Red shoe on my right foot, and a Red on my left foot

當(dāng)Dude類包含引用類型屬性Shoe的時候,在托管堆上的情況是這樣的:

拷貝后,2個Dude的Shoe類型的屬性指向了同一個托管堆內(nèi)的Shoe實例,改變Shoe的值會同時影響到2個Dude。

很顯然,這不是我們期望的完全拷貝,如何做到完全拷貝呢?
--實現(xiàn)ICloneable接口

ICloneable接口的Clone()方法,允許我們在拷貝的時候,進(jìn)行一些自定義設(shè)置。

讓引用類Shoe實現(xiàn)ICloneable接口。

public class Shoe : ICloneable{    public string Color;         public object Clone()    {Shoe newShoe = new Shoe();newShoe.Color = Color.Clone() as string;return newShoe;    }}

以上,Shoe的string類型屬性Color之所以可以使用Color.Clone()方法,是因為string也實現(xiàn)了ICloneable接口;又由于Clone()返回類型是object,所以,在使用Color.Clone()方法之后,需要把object轉(zhuǎn)換成string類型。

現(xiàn)在,在Dude類的CopyDude()方法中,當(dāng)拷貝Shoe類型屬性的時候,就可以使用Shoe獨有的拷貝方法Clone()。

public Dude CopyDude(){    Dude newPerson = new Dude();    newPerson.Name = Name;    newPerson.LeftShoe = LeftShoe.Clone() as Shoe;    newPerson.RightShoe = RightShoe.Clone() as Shoe;        return newPerson;}

客戶端程序:

public static void Main(){    Dude Bill = new Dude();    Bill.Name = "Bill";    Bill.LeftShoe = new Shoe();    Bill.RightShoe = new Shoe();    Bill.LeftShoe.Color = Bill.RightShoe.Color = "Blue";         Dude Ted =  Bill.CopyDude();    Ted.Name = "Ted";    Ted.LeftShoe.Color = Ted.RightShoe.Color = "Red";         Console.WriteLine(Bill.ToString());    Console.WriteLine(Ted.ToString());    }

輸出結(jié)果:
Bill : Dude!, I have a Blue shoe on my right foot, and a Blue on my left foot
Ted : Dude!, I have a Red shoe on my right foot, and a Red on my left foot

這正是我們期望的完全拷貝!

完全拷貝,托管堆上的情況是這樣的:

當(dāng)然也可以讓同時包含值類型和引用類型成員,同時需要拷貝的類實現(xiàn)ICloneable接口。

public class Dude: ICloneable{    public string Name;    public Shoe RightShoe;    public Shoe LeftShoe;         public override string ToString()    {return (Name + " : Dude!, I have a " + RightShoe.Color  +    " shoe on my right foot, and a " +    LeftShoe.Color + " on my left foot.");    }    #region ICloneable Members         public object Clone()    {Dude newPerson = new Dude();newPerson.Name = Name.Clone() as string;newPerson.LeftShoe = LeftShoe.Clone() as Shoe;newPerson.RightShoe = RightShoe.Clone() as Shoe; return newPerson;    }         #endregion}

客戶端調(diào)用:

public static void Main(){    Class1 pgm = new Class1();         Dude Bill = new Dude();    Bill.Name = "Bill";    Bill.LeftShoe = new Shoe();    Bill.RightShoe = new Shoe();    Bill.LeftShoe.Color = Bill.RightShoe.Color = "Blue";        Dude Ted =  Bill.Clone() as Dude;    Ted.Name = "Ted";    Ted.LeftShoe.Color = Ted.RightShoe.Color = "Red";         Console.WriteLine(Bill.ToString());    Console.WriteLine(Ted.ToString());     }

輸出結(jié)果:
Bill : Dude!, I have a Blue shoe on my right foot, and a Blue on my left foot.
Ted : Dude!, I have a Red shoe on my right foot, and a Red on my left foot.

也是我們期望的完全拷貝!

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

標(biāo)簽: ASP.NET
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美视频精品全部免费观看| 成人在线免费观看网站| 精品亚洲自拍| 国产亚洲一卡2卡3卡4卡新区| 亚洲一二三区视频| 黄色成人91| 午夜日韩在线| 欧美日韩日本国产亚洲在线| 国产主播一区| 蜜桃tv一区二区三区| 婷婷激情综合| 男人的天堂久久精品| 免费在线视频一区| 中文精品电影| 日韩精品免费视频一区二区三区| 亚洲精品欧美| 亚洲三级国产| 国产欧美午夜| 国产精品久久乐| 久久精品女人| 91亚洲一区| 丝袜美腿一区| 午夜日本精品| 日韩亚洲精品在线观看| 欧美日韩亚洲三区| 国内精品麻豆美女在线播放视频| 欧美日韩视频免费观看| 久久婷婷久久| 乱人伦精品视频在线观看| 亚洲天堂日韩在线| 国产亚洲精aa在线看| 日本电影久久久| 精品国产中文字幕第一页| 久久久久久网| 欧美va天堂在线| 日韩影院免费视频| 国产欧美一区二区色老头| 黄色精品视频| 亚洲成av人片一区二区密柚| 国产日韩专区| 91免费精品国偷自产在线在线| 国产精品综合| 久久影视一区| 日韩精品欧美精品| 97欧美在线视频| 精品日韩毛片| 亚久久调教视频| 久久精品国产网站| 婷婷综合五月| 日本va欧美va精品发布| 国产精品毛片一区二区在线看| 国产婷婷精品| 久久99性xxx老妇胖精品| 1024精品一区二区三区| 日韩欧美中文字幕电影| 日韩专区精品| 91成人在线| 亚洲一级黄色| 久久av电影| 日韩影院精彩在线| 亚洲天堂av影院| 亚洲精品九九| 日韩精品第一区| 日本不卡一二三区黄网| 日韩久久精品网| 国产欧美三级| 蜜臀久久99精品久久久画质超高清 | 婷婷久久免费视频| 国产综合色区在线观看| 日韩av中文字幕一区二区三区| 欧美中文字幕一区二区| 精品视频在线观看网站| 亚洲精品电影| 麻豆精品久久| 国产日韩综合| 国产欧美69| 亚洲激情av| 天堂√8在线中文| 石原莉奈一区二区三区在线观看| 国产精品一国产精品k频道56| 激情综合网站| 美女国产一区二区三区| 亚洲免费成人av在线| 日韩av在线中文字幕| 日韩成人在线看| 99精品在线观看| 你懂的亚洲视频| 久久国产中文字幕| 精品视频国内| 亚洲一区观看| 久久人人88| 欧美a一区二区| 奇米亚洲欧美| 九色精品91| 国产在线|日韩| 国产亚洲欧美日韩精品一区二区三区 | 欧美丝袜一区| 久久精品卡一| 国产探花一区| 亚洲国内精品| 国产精品a级| 天海翼精品一区二区三区| 日本久久成人网| 国产精品高清一区二区| 好看不卡的中文字幕| 国产精品白丝久久av网站| 亚洲精品一区二区在线看| 九九久久国产| 国产欧美日韩免费观看| 亚洲一区国产| 久久中文字幕二区| 九九精品调教| 久久精品三级| 精品国产18久久久久久二百| 美女国产精品| 激情91久久| 久久久久网站| 国产成人调教视频在线观看| 国产日韩欧美一区| 亚洲乱亚洲高清| 免费成人在线观看| 99riav1国产精品视频| 尤物在线精品| 激情久久婷婷| 99久久www免费| 中文字幕在线免费观看视频| 亚洲综合电影| 成人精品视频| 激情亚洲影院在线观看| 岛国av在线网站| 亚洲电影有码| 秋霞影院一区二区三区| 欧美va亚洲va日韩∨a综合色| 樱桃视频成人在线观看| 在线亚洲人成| 久久久久免费| 久久精品在线| 欧美亚洲国产激情| 香蕉久久久久久久av网站| 青草久久视频| 亚洲人成精品久久久| 国产专区一区| 精品一区二区三区亚洲| 久久成人高清| 欧美日韩精品在线一区| 成人亚洲一区二区| 久久99精品久久久野外观看| 欧美国产免费| 国产精品mv在线观看| 精品三级国产| 成人在线视频中文字幕| 日韩一区亚洲二区| 福利一区在线| 成人精品天堂一区二区三区| 国产精品va| 国产中文在线播放| 中文字幕在线免费观看视频| 久久高清免费| 欧美精品一二| 日韩精品高清不卡| 国产精品亚洲一区二区在线观看 | 久久国产毛片| 国产v日韩v欧美v| 99国产精品一区二区| 中文在线а√天堂| 亚洲欧美日本日韩| 婷婷成人av| 成人午夜网址| 日韩电影二区| 蜜桃av一区二区在线观看| 中文字幕中文字幕精品| 国产激情一区| 天堂а√在线最新版中文在线| 国产亚洲精品久久久久婷婷瑜伽| 男女男精品视频网| 精品精品国产三级a∨在线| 日韩一区二区三区在线免费观看| 亚洲免费激情| 日韩二区在线观看| 欧美三区四区| 视频一区中文字幕国产| 国产精品va| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 亚洲色图国产| 国产一区二区三区天码| 久久精品影视| 欧美另类中文字幕| 国产h片在线观看| 蜜桃视频一区二区| 另类欧美日韩国产在线| 性色一区二区| 国产精品videossex| 亚洲一区二区毛片| 国产精品网址| 自拍日韩欧美| 亚洲三级av| 欧美成a人免费观看久久| 中文字幕一区二区三区在线视频| 人在线成免费视频| 中文字幕av一区二区三区四区|