程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 所有值類型繼承自System.ValueType的疑惑

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

編輯:更多關於編程

      比如說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了,所以不能繼承了

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved