读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(三)
【checked 和 unchecked 基元类型操作】
1.第一种使用方式
UInt32 invalid = unchecked((UInt32) (-)); //OK,不会抛异常 Byte b = ;
b = checked((Byte) (b + ));//抛出OverflowException异常
2.第二种使用方式
checked {//开始一个checked块
Byte b = ;
b = (Byte) (b + );//该表达式会进行溢出检查
}//结束一个checked块
简化写法
checked {
Byte b = 100;
b +=200;
}
【注意】
checked操作符 和 checked语句——唯一的作用就是决定生成哪个版本的加、减、乘和数据转换IL指令,所以在一个checked操作符或者语句中调用一个方法,不会对该方法造成任何影响,如下例所示:
checked {
//假定SomeMethod试图把400加载到一个Byte中
SomeMethod(400);
//SomeMethod可能会、也可能不会抛出一个OverflowException异常
//如果SomeMethod 使用checked指令来编译,就会抛出异常
//但这和当前的checked语句无关
}
【建议】
1.尽量使用有符号数值类型,而不要使用无符号数值类型。
2.代码中,将不希望溢出的部分放到一个checked块中,同时捕捉OverflowException。
3.代码中,将允许发生溢出的代码显示的放到一个unchecked块中。
4.对于没有使用 checked 和 unchecked 的任何代码,都假定你希望在发生溢出时抛出一个异常,此时的溢出应被视为bug。
读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(三)的更多相关文章
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(二)
[基元类型推荐] 推荐直接使用 FCL 类型. [理由] 编码时不至于困惑string与String的使用.由于C#的stirng(一个关键字)直接映射到System.String(一个 FCL 类型 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_基元类型(一)
[概念] 编译器直接支持的数据类型 [C#基元类型与对应的 FCL 类型] C#基元类型 FCL 类型 说明 sbyte System.Sbyte 有符号8位值 byte System.Byte 无符 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_dynamic基元类型
1.代码使用 dynamic 表达式/变量来调用一个成员时,编译器会生成特殊的 IL 代码来描述所需的操作.这种特殊的代码称为 payload(有效载荷).在运行时,payload 代码根据当前由 d ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_发布者策略控制
在 读经典——<CLR via C#>(Jeffrey Richter著) 笔记_高级管理控制(配置)中,是由程序集的发布者将程序集的一个新版本发送给管理员,后者安装程序集,并手动编辑应用 ...
- [Clr via C#读书笔记]Cp5基元类型引用类型值类型
Cp5基元类型引用类型值类型 基元类型 编译器直接支持的类型,基元类型直接映射到FCL中存在的类型. 作者希望使用FCL类型名称而避免使用关键字.他的理由是为了更加的清晰的知道自己写的类型是哪种.但是 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_方法执行
[前言] 方法执行前,CLR 会检测方法内代码引用的所有类型.同时 CLR 会分配一个内部数据结构,用来管理对所有引用的类型的访问. 首次执行方法时,托管程序集会把 IL 转换成本地 CPU 指令,并 ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_通过ILDasm.exe查看编译器如何将类型及其成员编译成元数据
[实例代码] using System; public sealed class SomeType //-------------1 { //嵌套类 private class SomeNestedT ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_高级管理控制(配置)
一个应用程序的XML配置文件示例: <?xml version="1.0"?> <configuration> <runtime> <as ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_运行时解析类型引用
public sealed class Program{ public static void Main() { System.Console.WriteLine("Hi"); } ...
随机推荐
- Strophe.Status的所有值
ERROR: 0 CONNECTING: 1 CONNFAIL: 2 AUTHENTICATING: 3 AUTHFAIL: 4 CONNECTED: 5 DISCONNECTED: 6 DISCON ...
- js原型及原型链
一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f ...
- REST API (更新文档)
Elasticsearch的更新文档API准许通过脚本操作来更新文档.更新操作从索引中获取文档,执行脚本,然后获得返回结果.它使用版本号来控制文档获取或者重建索引. 我们新建一个文档: 请求:PUT ...
- Apollo问题
1.安装问题: 一不小心安装了NVIDIA,导致bash docker/scripts/dev_start.sh无法启动:[ERROR] Failed to start docker containe ...
- 一个典型的PHP分页实例代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Tensorflow梯度下降应用
import tensorflow as tfimport numpy as np #使用numpy生成随机点x_data = np.random.rand(100)y_data = x_data*0 ...
- 什么是FastCGI, PHP-FPM
CGI,FastCGI都是一套接口标准:是编程语言(比如php,python; python里面也有wsgi)与web服务器(比如Nginx)的通信标准(比如你跟老外交流,那么FastCGI就相当于是 ...
- DIY的RPM包怎么签名呢 How to sign your custom RPM package with GPG key
https://gist.github.com/fernandoaleman/1376720 How to sign your custom RPM package with GPG key 这是文 ...
- SDUT 3398 数据结构实验之排序一:一趟快排
数据结构实验之排序一:一趟快排 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 给定N个长整 ...
- 多线程学习-基础(一)Thread和Runnable实现多线程
很久没记录一些技术学习过程了,这周周五的时候偶尔打开“博客园”,忽然让我产生一种重拾记录学习过程的想法,记录下学习研究过程的一点一滴,我相信,慢慢地就进步了!最近想学习一下多线程高并发,但是多线程在实 ...