所有值类型继承自System.ValueType的疑惑

2013-01-09clown_ 的分享   加三联MM小编微信好友:sanlian2018

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

TA发布的帖子

864

收藏

605