《CLR via C#》Part2之Chapter5 基元类型、引用类型和值类型(一)
2013-03-10 22:47
375 查看
本章内容
编程语言的基元类型
引用类型和值类型
值类型的装箱和拆箱
对象哈希码
dynamic基元类型
本章目的
通过学习了解基元类型、引用类型和值类型的区别,希望让coder能避免引用一些不易察觉的bug,并提高性能。编程语言的基元类型
//分配一个整数
[code]System.Int32 a = new System.Int32();
//C#中我们使用
int a = 0;
[/code]
如上代码,某些类型很常用,许多编译器允许简化他们的语法,而且生成的IL代码与使用System.Int32生成的IL代码完全一致。
编译器直接支持的数据类型称为基元类型(primitive type)
基元类型直接映射到Framework类库(FCL)中存在的类型,比如C#中,int直接映射到System.Int32类型,因此,以下4行代码都能正确编译,并生成完全一致的IL:
int a = 0;//最方便
[code]System.Int32 a =0; //方便
int a = new int();//不方便
System.Int32 a = new System.Int32();//最不方便
[/code]
对于都支持CLS(common language specification公共语言规范)的类型,VS的其他语言都将提供类似的基元类型。对于非CLS的类型不要求。
下图标明了C#中的对应FCL的基元类型:
在这里我们建议大家通常在使用类型的时候,使用FCL的类型名称,比如Int32 a = 0; String isaac = String.Empty等。
checked和unchecked基元类型操作
对基元类型执行的许多算术运算都可能造成溢出,如下:Byte b = 100;
[code]b = (Byte)(b+200);//b现在包含44(或者16进制2C)
[/code]
在大多数情况下,这种悄然的溢出是我们不希望的。因为它会引起应用程序的异常。但在极少情况下,比如计算一个哈希值或者校验和,这种溢出是可接受的,甚至是希望的。
不同的语言对于溢出的处理不同,比如C/C++不认为溢出是个错误,而VB总是将溢出视为错误,检查到后会抛出异常。
C#允许程序员自己决定如何处理溢出,默认检查时关闭状态。C#通过提供checked和unchecked操作符来实现。如下:
//unchecked UInt32 isvalid = unchecked((UInt32)(-1));//OK //checked Byte b = 100; b = checked((Byte)(b+200));//抛出OverflowException or b = (Byte)checked(b+200);//b包含44,不会抛出异常了。。
除了checked和unchecked操作符之外,C#还支持checked和unchecked语句块,以便标识当前块中所有的表达式都进行或者不进行溢出检查:
checked{ Byteb = 100; b = (Byte)(b+200);//这里要进行溢出检查 } //因为用了checked块,就可以使用+=的简化代码 checked{ Byte b = 100; b+=200; }
相关文章推荐
- 《CLR via C#》Part2之Chapter5 基元类型、引用类型和值类型(三)
- 《CLR via C#》Part2之Chapter5 基元类型、引用类型和值类型(二)
- 跟小静读CLR via C#(02)-基元类型、引用类型、值类型
- 《CLR via C#》读书笔记--基元类型、引用类型和值类型
- 《CLR via C#》读书笔记(5)基元类型、引用类型和值类型
- CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段
- 带着问题读CLR via C#(四)基元类型,引用类型和值类型(下)
- 【CLR Via C#】第5章 基元类型、引用类型、值类型
- CLR via C#(02)-基元类型、引用类型、值类型
- 《CLR via C#》读书笔记 之 基元类型、引用类型和值类型
- 《CLR Via C#》 学习心得之三 基元类型、引用类型和值类型
- 带着问题读CLR via C#(三)基元类型,引用类型和值类型(上)
- CLR Via C# 第五章(基元类型,引用类型与值类型)(1)——读书笔记
- CLR Via C# 学习笔记(1) 基元类型 值类型 引用类型
- CLR Via C# 学习笔记(1) 基元类型 值类型 引用类型
- 带着问题读CLR via C#(三)基元类型,引用类型和值类型(上)
- Read the "clr via C#" of 基元类型,引用类型,值类型(第五章)
- CLR Via C# 学习笔记(1) 基元类型 值类型 引用类型
- <NET CLR via c# 第4版>笔记 第5章 基元类型、引用类型和值类型
- 读书笔记_CLR.via.c#第五章_基元类型_引用类型_值类型