有关内存中Caste C#引用类型的信息

如果我有两个类,A和B,其中B派生自A:
class A {}
class B : A { }

我可以非常高兴地将B的实例转换为A.

B b = new B();
A a = b;

现在,我可以理解运行时如何确定底层类型是B,如ECMA-335(公共语言基础结构(CLI)分区I到VI)的第132页所述

Objects of instantiated types shall carry sufficient information to
recover at runtime their exact type (including the types and number of
their generic arguments). [Rationale: This is required to correctly
implement casting and instance-of testing,as well as in reflection
capabilities

那么,运行时如何知道虽然底层类型是B,但它实际上存储在A中.我知道我不会看到B上可用的方法,但如果底层类型是B,那么它存储存储位置A的类型?

那有意义吗?

解决方法

对象是B,CLI知道它是B.知道A的东西主要是编译器,然后将字段或local声明为A类(或者在某些情况下类似于方法链接,类型)通过该方法的返回类型已知,该方法被刻印到调用者的IL中.所以基本上:调用代码本身就是“我认为这是一个A”.作业等通常都是事先可以验证的,所以不存在弄错的风险.如果你试图破解IL故意弄错,运行时会告诉你并拒绝运行该方法.由于这些原因,将已知的B值分配给A本地/字段不需要任何类型检查 – 它只是一个直接分配.

相关文章

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