虚方法的调用

假设有这样一个声明:

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异常.

posted @ 2010-01-28 00:04  如斯夫  阅读(224)  评论(0编辑  收藏  举报