相关疑难解决方法(0)

callvirt .NET指令如何用于接口?

向某人解释虚拟调度很容易:每个对象都有一个指向表的指针作为其数据的一部分.该类有N个虚拟方法.每次调用特定方法时,我都会在对象到达时对其进行索引并调用表中的第i个方法.实现方法X()的每个类都将在同一个索引中包含方法X()的代码.

但后来我们得到了接口.并且接口需要某种类型的扭曲,因为两个实现相同接口的非继承类将在表的不同索引中具有虚函数.

我已经在网上搜索了,而且有很多讨论,我可以找到有关接口调度是如何能够实现.有两大类:a)某种哈希表查找对象以查找正确的分派表b)当对象被强制转换为接口时,会创建一个指向相同数据但不同的新指针虚函数表.

但是尽管有很多关于它如何工作的信息,但我找不到.NET运行时引擎如何实际实现它.

有没有人知道描述当对象类型是接口时在callvirt指令处发生的实际指针算法的文档?

.net c#

39
推荐指数
2
解决办法
1586
查看次数

标签 统计

.net ×1

c# ×1