日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)C#.NET → C#中值類型和引用類型解析、本質(zhì)區(qū)別有哪些?

      C#中值類型和引用類型解析、本質(zhì)區(qū)別有哪些?

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2012/10/24 21:47:08字體大。A-A+

      作者:佚名點(diǎn)擊:484次評(píng)論:0次標(biāo)簽: 值類型

      在C#中值類型的變量直接存儲(chǔ)數(shù)據(jù),而引用類型的變量持有的是數(shù)據(jù)的引用,數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)堆中。

      常見的值類型數(shù)據(jù)有:整值型(整形,浮點(diǎn)型,十進(jìn)制型),布爾類型,枚舉類型;

      引用類型有:接口,數(shù)組,Object類型,類,委托,字符串,null類型。

      在C#中每種類型的存儲(chǔ)方式有兩種:1)分配在托管棧中;2)分配在托管堆中;

      內(nèi)存的分配有CLR管理(即公共語言運(yùn)行時(shí)),這兩種方法的區(qū)別是:

      1)分配在托管棧中的變量會(huì)在創(chuàng)建它們的方法返回時(shí)自動(dòng)釋放,例如在一個(gè)方法中聲明Char型的變量UserInput=C,當(dāng)實(shí)例化它的方法結(jié)束時(shí),UserInput變量在棧上占用的內(nèi)存就會(huì)自動(dòng)釋放;

      2)分配在托管堆中的變量并不會(huì)在創(chuàng)建它們的方法結(jié)束時(shí)釋放內(nèi)存,它們所占用的內(nèi)存會(huì)被CLR中的垃圾回收機(jī)制釋放。

      看下面的代碼:

      1 static void Main(string[] args)
      2         {
      3             //當(dāng)nStudent聲明并賦值是,這時(shí)在托管棧上就會(huì)開辟一塊內(nèi)存來存儲(chǔ)nStudent的值,當(dāng)實(shí)例化nStudent的Main()方法結(jié)束時(shí),
      4             //nStudent在托管棧上占用的內(nèi)存會(huì)自動(dòng)釋放。
      5             int nStudent = 0;
      6             //當(dāng)聲明strStuName時(shí),這個(gè)時(shí)候“小明”存儲(chǔ)在托管堆中,而托管棧中存儲(chǔ)的是strStuName指向的引用。
      7             string strStuName = "小明";
      8
      9             Console.WriteLine("學(xué)生的總數(shù)是{0},五號(hào)的名字是{1}", nStudent, strStuName);
      10             Console.ReadKey();
      11         }

      裝箱和拆箱

      當(dāng)值類型的數(shù)據(jù)轉(zhuǎn)換成引用類型時(shí),CLR會(huì)先在托管堆配置一塊內(nèi)存,將值類型的數(shù)據(jù)復(fù)制到這塊內(nèi)存,然后再讓托管棧上的引用類型的變量指向這塊內(nèi)存,這樣的過程稱為裝箱。相反的話,有引用類型轉(zhuǎn)換成值類型的話就稱為拆箱。

      一般情況下,.NET會(huì)主動(dòng)的幫我們完成裝箱操作,但是拆箱并非主動(dòng),我們必須知道拆箱對(duì)象的實(shí)力類型,然后明確的去執(zhí)行拆箱操作。

      1 int BirthdayNum = 1989;
      2             object BoxBirthdayNum = BirthdayNum;//系統(tǒng)自動(dòng)裝箱
      3             int nBirthdayNum = (int)BoxBirthdayNum;//明確數(shù)據(jù)類型的拆箱

      因?yàn)榛ㄙM(fèi)了更多的時(shí)間,所以裝箱和拆箱對(duì)程序的性能有一定的影響。

      --------------------------------------------------------------------------------------------------------------------------------------

      類型推斷

      在C#中有兩種類型的數(shù)據(jù),一種是值類型,另一種是引用類型。

      值類型包括:內(nèi)置值類型、用戶自定義值類型、和枚舉,如 int,float bool 等,以及struct等。

      引用類型包括接口類型、用戶自定義的類、委托等。如 string 、DateTime、數(shù)組等。

      值類型是存儲(chǔ)在堆棧中,而引用類型是存儲(chǔ)在托管堆上,C#程序首先被編譯成IL程序,然后在托管執(zhí)行。值類型直接從堆棧中里面取值,而引用類型必須要先從堆棧里面取出它的地址,再根據(jù)這個(gè)地址在堆里找到對(duì)應(yīng)的值。


      值類型與飲用類型的本質(zhì)區(qū)別有以下幾點(diǎn):

      1.內(nèi)存分配: 值類型是分配在棧中的;而引用類型是分配在堆中。

      2.效率: 值類型效率高,不需要地址轉(zhuǎn)換;引用類型效率較低,需要進(jìn)行地址轉(zhuǎn)換。

      3.內(nèi)存回收: 值類型使用完后立即回收;引用類型使用完后不立即回收,而是交給GC處理回收。

      4.賦值操作: 值類型是創(chuàng)建一個(gè)新對(duì)象;引用類型創(chuàng)建一個(gè)引用。

      5.類型擴(kuò)展: 值類型不易擴(kuò)展,所有值類型都是密封(seal)的,所以無法派生出新的值類型;引用類型具有多態(tài)的特性方便擴(kuò)展。

      這是別人的總結(jié),我在這里拿來用下。

      下面我在說說它們?cè)谟梅ㄉ系膮^(qū)別了,C#之所以要分這兩種數(shù)據(jù)類型的原因是達(dá)到更好的性能,把一些基本類型如int、bool規(guī)定為值類型,而把包含許多字段的較大類型規(guī)定為引用類型,如用戶自定義的類。值類型主要是負(fù)責(zé)存儲(chǔ)數(shù)據(jù),引用類更多是用在代碼的重用性上。

      從C#3.0開始,C#引入了一個(gè)隱式類型推斷的關(guān)鍵字var,編譯器可以通過它的初始值來判斷變量的具體類型。var只能用于局部變量的聲明,不能用于字段級(jí)的變量聲明。使用var關(guān)鍵字時(shí),var必須得有初始值,這樣編譯器才能判斷是否是真實(shí)變量。

      1 class Program
      2     {
      3         static void Main(string[] args)
      4         {
      5             var i = 10;//隱式類型
      6             int m = 10;//顯示類型
      7
      8             var Program=new Program();
      9             Program.nAge = 20;
      10             Program.SayHello();
      11         }
      12
      13         private int nAge;
      14         public void SayHello()
      15         {
      16             var message = "my age is {0}";
      17             Console.WriteLine(message, nAge);
      18         }
      19     }

      message初始值的變量為字符串類型,因此編譯器可以推斷其類型為String類型。

        vs2008
        (51)vs2008
        微軟的開發(fā)工具當(dāng)前是可視化軟件開發(fā)工具的主流,越來越多的從業(yè)人員,將會(huì)使用系列開發(fā)工具,提供了的即時(shí)編輯和套用的功能。而且,對(duì)的支援感覺起來不比差,同時(shí),它還提供了和一樣的,也就是可以一個(gè)分割視窗,同時(shí),我們還是可以看到設(shè)計(jì)畫面和源代碼。相對(duì)于的技術(shù)不成熟,在使用方面和功能方面趨向完善。...更多>>
        • Visual Studio 2008(vs2008)中文專

          05-15 / 3.75G

          推薦理由:Visual Studio 2008 中文專業(yè)版 vs2008(含MSDN for SP1) 軟件大。 3.84G 軟件語言: 簡(jiǎn)體中文 軟件類別:
        • Visual Studio 2008 SP1 補(bǔ)丁(VS20

          09-08 / 848.2M

          推薦理由:微軟Visual Studio 2008 SP1 簡(jiǎn)體中文版發(fā)布,VS作為微軟旗艦級(jí)的開發(fā)集成環(huán)境最新版2008中加入了對(duì)WPF以及
        • Visual Studio 2008中文版

          05-15 / 1.90G

          推薦理由:VS2008的性能改進(jìn)以及十大新功能Visual Studio 2008的性能改進(jìn) 在 VS 2008中,我們就開發(fā)人員所關(guān)心的一些常
        • Visual Studio 2010vs2010中文旗艦

          02-14 / 2.25G

          推薦理由:Microsoft Visual Studio 2010 專業(yè)版是一個(gè)集成環(huán)境,它簡(jiǎn)化了有關(guān)創(chuàng)建、調(diào)試和部署應(yīng)用程序的基本任務(wù)。借
        • Visual Studio 2005(vs2005)簡(jiǎn)體中

          05-15 / 1.46G

          推薦理由:需要注意的是:下載后解壓,找到SETUP文件夾下的setup.sdb,用記事本打開它找 到 [Product Key],將下面的一
        • MSDN Library for Visual Studio 2

          05-15 / 1.58G

          推薦理由:MSDN Library for Microsoft Visual Studio 2005,msdn幫助文件,從 VS2005的安裝DVD光盤中分離出來的. MSDN

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)