之前在Emit的学习过程中,多次碰到了方法的调用,发现有时候是使用Call而 有时候是使用Callvirt,一直对这两者的区别不甚了解。然后就查阅了MSDN, MSDN中对这两者的解释为:
l Call:调用由传递的方法说明符指示的方法;
l Callvirt:对对象调用后期绑定方法,并且将返回值推送到计算堆栈上。
但是看了之后还是很不明白,我想可能是因为中文版的缘故吧。今天下午再次 看到了对Callvirt指令的解释,“对对象调用后期绑定方法”,突然想到,这个 好像是指多态的意思吧?在一看virt,应该就是virtual的缩写,于是就更加肯定 了自己的想法(外派在农行,不能上网,不然在园子随便一找就有结果了,伤心 啊!),立马动手开始实践。
我们用最经典的Animal的例子来验证这个想法,首先定义相关的类型,如下:
Animal
class Animal { public virtual void Speak() { Console.WriteLine("Animal.Speak"); } } class Cat : Animal { public override void Speak() { Console.WriteLine("Cat.Speak"); } } class Dog : Animal { public override void Speak() { Console.WriteLine("Dog.Speak"); } }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索class
, 方法
, public
, console
WriteLine
,以便于您获取更多的相关知识。
时间: 2024-10-14 13:22:44