所有實值型別繼承自System.ValueType的疑惑

來源:互聯網
上載者:User

  比如說int吧,是實值型別,是個struct,是這樣聲明的

  public struct Int32 : IComparable, IFormattable, IConvertible, IComparable, IEquatable

  哪能看出來繼承自ValueType?? 再說struct不是不能繼承嗎?為什麼說繼承自ValueType??不解。。。。

  回答:

  ValueType的確是類類型,但是他的子類卻是實值型別,這是因為CLR對他的子類經過了特殊的處理.CLR若判斷某類繼承自ValueType,那麼會在記憶體配置方面使它具有實值型別的特徵(例如直接分配在棧上),這和類庫的繼承階層並無多大關係。

  C#這邊的編譯器也經過了特殊處理,使實值型別在諸多方面不同於類類型,例如,我們不可以聲明一個繼承自ValueType的實值型別等等.

  簡單的說微軟對.net中的實值型別做了特殊處理使其繼承自ValueType.注:文法上struct是不允許繼承的,但可以實現介面.覺得微軟挺噁心的.老搞一些和文法不符的東西.

  很多類型都沒有顯示的繼承基類,.net預設為繼承object,以string為例,只直接繼承object的.

  struct是直接繼承valuetype的,預設的,但struct有個特點,不能顯示繼承基類,即只能繼承valuetype,所以就這樣了.所以就像樓主看的一樣了

  書上說不能繼承基類了,是因為C#是單繼承了,已經有這valuetype了,所以不能繼承了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.