c# – .NET CIL Call或CallVirt?
如何确定是否需要使用“Call”或“Callvirt”调用方法?
解决方法
您可以逐个遵循这些简单的规则来确定您应该使用哪些:
>方法是静态的吗?然后使用电话. 在所有其他情况下,不需要虚拟调度,因此您可以使用呼叫 – 但您应该使用callvirt.原因如下: 在非虚方法上使用callvirt等同于调用,除非第一个参数为null.在这种情况下,callvirt会立即抛出NullReferenceException,而call则不会.这是有道理的,因为callvirt旨在用于需要虚拟方法调度的情况,如果没有可以进行vtable查找的对象,则无法进行虚拟方法调度. 请注意,即使不需要vtable查找,如果第一个参数为null,callvirt仍将抛出异常! 考虑到这些信息,对引用类型的所有非静态方法调用使用callvirt(如C#编译器所做的那样)可能更好,因为它会在调用站点立即导致NullReferenceException,而不是在以后使用它时(显式或隐式)方法内部. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – Rails – 测试夹具错误NoMethodError:未
- 用xml文件设置ImageButton按下、弹起加载不同的图片 实现
- u-boot-2014.10移植第20天----添加nand flash命令支持(二)
- AJAX - $.get( url, [data], [success], [type] )
- 优化 – 在postgres seq扫描和位图堆扫描有什么区别?
- ios – Apple App Store显示应用程序的通用大小,而不是应用
- Dojo学习笔记(7. dojo.dom)
- fastjson处理接口时的一个问题
- SRR, WRR,DWRR, WDRR, SDWRR调度算法的区别
- 用jQuery.ajaxSetup实现对请求和响应数据的过滤
- com.badlogic.gdx.utils.SerializationException
- ruby-on-rails – 我怎么弄清楚为什么我的rails
- Cocos2d-x-3.6 用户交互原理---------如何通过JN
- ruby-on-rails – 截断Markdown?
- Flex中Number型去除空值(NaN)
- CFDictionary不会桥接到NSDictionary(Swift 2.0
- 用正则表达式批量为a增加target=''_blan
- ruby-on-rails-3 – 以天,小时和分钟计算时间差
- ruby-on-rails-3 – 如何阻止我的rails应用程序返
- Roope的Cocos2d-x学习之旅 003:无限重复和有限重