微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 为什么值类型继承自引用类型?

参见英文答案 > How do ValueTypes derive from Object (ReferenceType) and still be ValueTypes?5个
> System.ValueType Understanding7个
我有两个问题:

>我们知道所有类型都是从引用类型的Object派生出来的.我的问题是为什么int – 一个值类型 – 继承自引用类型Object?这可能吗?
>如果int是从Object派生的,为什么我们需要在将int传递给需要object作为参数的函数时使用Box?通常,当需要将派生类型的对象作为参数传递给基类型的期望对象时,您不需要再做任何其他操作.为什么要在这里

对于我来说,这种情况看起来像是这种类型层次结构设计的问题.

PS.我发现this相关的问题,但答案并没有给出任何真实的洞察力 – 只是抽象地谈论框.

解决方法

我们需要小心,不要在这里混淆概念.

首先是子类型. int是对象的子类型.子类型基本上意味着由超类型保证的合同(例如“有一个方法ToString,返回一个合适的字符串重新排序”)也保证该子类型.

然后在C#中继承.在C#中,继承

>通过确保超类型提供的接口在子类型中也可用来创建子类型
>提供认实现,即如果不覆盖方法,则可以获得超类型的实现.这基本上是一个方便的功能.

(C#中的接口实现将是另一个子类型机制的示例,它提供1但不是2)

基本上都是这样子类型或继承都不能保证内存布局,值/引用类型语义等.这些概念是正交的.

“但那不对,”你可能会说. “对象合同的一部分是”引用类型语义“.这是需要拳击的地方.每当编译时类型的值类型是引用类型(即对象,ValueType或接口)时,它会模拟参考类型语义.

原文地址:https://www.jb51.cc/csharp/94043.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐