加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:57:54 所属栏目:百科 来源:网络整理
导读:参见英文答案 How do ValueTypes derive from Object (ReferenceType) and still be ValueTypes?5个 System.ValueType Understanding7个 我有两个问题: 我们知道所有类型都是从引用类型的Object派生出来的.我的问题是为什么int – 一个值类型 – 继承自引用
参见英文答案 > 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或接口)时,它会模拟参考类型语义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读