萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> 所有值類型繼承自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了,所以不能繼承了

copyright © 萬盛學電腦網 all rights reserved