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或接口)时,它会模拟参考类型语义.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...