虚方法的调用

假设有这样一个声明:

class A

{

public void virtual AMethod()

{

}

}

class B: A

{

override …

public void BMethod()

{

}

}

class Client

{

A a = new B();

a.AMethod();

B b = new B();

b.BMethod();

}

此时,.net 编译的时候会产生IL指令: callvirt来调用AMethod,产生call指令来调用BMethod;

call指令用来调用声明方法,而callvirt指令用来调用实际方法,因此callvirt指令需要在运行时检查对象的实际类型,如果该对象为null,则抛出NullReferenceException异常.

原文地址:https://www.cnblogs.com/lbsong/p/1657982.html