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

比如说int吧,是值类型,是个struct,是这样声明的
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>

哪能看出来继承自ValueType?? 再说struct不是不能继承吗?为什么说继承自ValueType??不解。。。。

 

回答:

ValueType的确是类类型,但是他的子类却是值类型,这是因为CLR对他的子类经过了特殊的处理.CLR若判断某类继承自ValueType,那么会在内存分配方面使它具有值类型的特征(例如直接分配在栈上),这和类库的继承层次结构并无多大关系。
C#这边的编译器也经过了特殊处理,使值类型在诸多方面不同于类类型,例如,我们不可以声明一个继承自ValueType的值类型等等.

 

简单的说微软对.net中的值类型做了特殊处理使其继承自ValueType.注:语法上struct是不允许继承的,但可以实现接口.觉得微软挺恶心的.老搞一些和语法不符的东西.

 

很多类型都没有显示的继承基类,.net默认为继承object,以string为例,只直接继承object的.
struct是直接继承valuetype的,默认的,但struct有个特点,不能显示继承基类,即只能继承valuetype,所以就这样了.所以就像楼主看的一样了
书上说不能继承基类了,是因为C#是单继承了,已经有这valuetype了,所以不能继承了

posted @ 2012-08-26 16:49  唔愛吃蘋果  阅读(4147)  评论(0编辑  收藏  举报