C#實值型別和裝箱

來源:互聯網
上載者:User

      今天閑逛C# Corner http://www.c-sharpcorner.com/網站(很有名氣的),發現一篇不錯的文章,圖文並茂的方式講解了C#的實值型別以及實值型別調用GetType時候,或者實值型別被加入到ArrayList時候發生的裝箱過程。這篇文章能協助你對實值型別的裝箱過程,以及在通過引用如介面、委託或ArrayList來處理實值型別時應注意些什麼有更好的理解,這裡記錄下來和朋友們分享分享:

      當一個實值型別執行個體被轉換成System.Object類型或是介面時,CLR需要把實值型別轉換成一個恰當的參考型別。然後在託管堆上分配記憶體並將對象拷貝上去。我們之所以要瞭解它,有兩個原因:裝箱是一個非常耗費資源的過程(將整個對象從棧上拷貝到堆上會耗費處理器的周期以及託管空間),我們因此(裝箱)而有了兩個在記憶體可以有相互矛盾狀態的對象。

      文章就不粘貼到這裡了,這裡加一個連結地址:方便作為查詢及記錄:

http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_boxing02122006144943PM/csharp_boxing.aspx

 

    需要特別注意一下:當調用ToString()方法時候,不總是發生裝箱操作,它依賴於實值型別的具體實現。加入那實值型別重寫了ToString()方法,編譯器將直接調用那產生的IL代碼而不用發生裝箱操作。大多數的.Net的BCL(Base Class Libraries)或FCL(Framework Class Libraries)實值型別,像Int32重寫了ToString()方法,所以當

Int32 count=10;

string strcount=count.ToString();//沒有進行裝箱操作

而對於object.GetType()方法,它不是一個虛方法,所以實值型別不能夠提供任何實現,當調用GetType()將總是會發生裝箱操作。

 

Best Regards,

Charles

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.