毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> net技术 >> 正文

checked((byte)s)和Convert.ToByte(s)有什么区别

更新时间:2016-7-17:  来源:毕业论文

Convert.To类型(变量)和checked((类型)变量)的本质区别是什么?

<<C#入门经典>>上面说,C#工程的Build选项的"高级"选项卡里面,有一个单选框叫做
"Check for arithmetic overflow/underflow"。这个勾选以后checked(类型)变量)会有运行时的溢出检查

            short s = 3333;
            byte b1 = (byte)s;
            byte b2 = Convert.ToByte(s);//和checked((类型)变量)强制类型转换的本质区别是什么?

也就是说,b1在赋值的时候,会有溢出检查。这个效果和b2这一行相同。
那么我的问题是:

(1) 都是溢出检查,checked((byte)s)和Convert.ToByte(s)是完全一样的行为吗,还是稍有不同?
(2) 是不是说,编译器会根据我是否勾选了溢出检查,来决定checked(())是什么都不做,还是内部调用Convert.ToByte? 显示转换和Convert.ToXXX之间到底有什么关系呢?

启用或者不启用溢出检查,你难道不能直截了当地理解其含义吗?为什么要随便纠结其它的函数,非要知道.net内部是不是调用你指定的其它函数呢? a标签链接点击后失效几秒钟如何实现

如果你关心 MSIL 代码,那么你可以贴出来启用和不启用“溢出检查”时产生的 MSIL 语言程序两种代码。我不反对你把这2种代码贴出来。在任何一个非常准确毫无争议的系统功能上,你应该自己动手,不要无限制地千方百计罗列各种浅层问题。

我告诉你一个原则:浅层的不重要的问题,你应该学会自己动手,或者先不要纠结。

(1) 都是溢出检查,checked((byte)s)和Convert.ToByte(s)是完全一样的行为吗,还是稍有不同

目前她们的行为是一样的,但是 javascript高级程设计中讲解函数递归调用
checked((byte)s)的行为是由C#语言规范定义的,比如DotNet和Mono的结果都应该是一样的。
而Convert.ToByte则是函数实现,它的行为要看函数的说明书和具体内部实现。甚至将来的dotnet版本,都可能引入差别。


(2) 是不是说,编译器会根据我是否勾选了溢出检查,来决定checked(())是什么都不做,...
如果你在代码里显式的调用checked,那么它将优先于“是否勾选了溢出检查”。
(举个例子,你勾选了溢出检查,代码 byte b1 = unchecked((byte)s);也不会抛出异常)

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。