欢迎来到山村网

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

2019-03-02 09:47:09浏览:108 来源:山村网   
核心摘要:  比如说int吧,是值类型,是个struct,是这样声明的  public struct Int32 : IComparable, IFormattable, IConvertible, IC

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

(责任编辑:豆豆)
下一篇:

C#中的引用传递、值传递

上一篇:

C#文件路径操作总结

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com