展会信息港展会大全

所有值类型继承自System.ValueType的疑惑
来源:互联网   发布日期:2016-01-26 10:28:39   浏览:1773次  

导读:比如说int吧,是值类型,是个struct,是这样声明的 public struct Int32 : IComparable, IFormattable, IConvertible, IComparable, IEquatable 哪能看出来继承自ValueType?? 再说struct不是不能 ...

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

赞助本站

人工智能实验室

相关热词: System ValueType

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港