在上一篇文章CLR怎样实现虚方法的多态调用(1)中主要介绍了CLR怎样多态调用虚方法以及各种类型 的方法在Method Table中的排布,但是没有介绍怎样调用接口方法,当某个对象向上转型为接口时进行多 态调用时,CLR是怎样实现的呢?以下面这段代码为例来说明:
namespace Demo
{
public interface IFoo
{
void Foo();
}
public class Base : IFoo
{
public void Foo()
{
Console.WriteLine("In base's Foo function");
}
}
class Program
{
static void Main(string[] args)
{
IFoo i = new Base();
i.Foo();
}
}
}
在Essential .NET中,Don Box向读者简单描述了基于接口的多态调用,在堆中有一个全局接口映射表 ,当某个类实现了一个接口,就会在这个接口表中增加项,而增加的这些项又指向这个具体类的Method Table中的Method,可能说的不是太清楚,就用个图来表示:
时间: 2024-09-01 13:25:43