CLR提供了两个IL指令来调用方法call和callvirt,
其中call指令根据引用变量的类型来调用方法;
callvirt指令根据引用变量指向的对象类型来调用方法;根据引用变量的类型来调用方法
根据引用变量指向的对象类型来调用方法
这两句帮我解释一下

解决方案 »

  1.   

    我的理解,如有错误请指正。Base a = new Derived();
    Base 根据引用变量的类型来调用方法
    Derived 根据引用变量指向的对象类型来调用方法callvirt这些函数我们用不着调吧?没研究过。
      

  2.   

    "CALL通常表示被调用的方法是静态的或共享的, 而CALLVIRT则用于实例方法."所谓 "变量的类型" 就是类 ;"引用变量指向的对象类型" 就是实例化的对象我觉得 "引用变量指向的对象类型" 后面还是别加 "类型" 那两个字的好,免得让人误会。其实 类和类型 在.net里面就是一回事。不晓得理解的对不