《3值类型》-精选课件(公开PPT)

上传人:zhuma****mei2 文档编号:136018240 上传时间:2020-06-22 格式:PPT 页数:121 大小:1.24MB
返回 下载 相关 举报
《3值类型》-精选课件(公开PPT)_第1页
第1页 / 共121页
《3值类型》-精选课件(公开PPT)_第2页
第2页 / 共121页
《3值类型》-精选课件(公开PPT)_第3页
第3页 / 共121页
《3值类型》-精选课件(公开PPT)_第4页
第4页 / 共121页
《3值类型》-精选课件(公开PPT)_第5页
第5页 / 共121页
点击查看更多>>
资源描述

《《3值类型》-精选课件(公开PPT)》由会员分享,可在线阅读,更多相关《《3值类型》-精选课件(公开PPT)(121页珍藏版)》请在金锄头文库上搜索。

1、,值类型,董骏峰 合肥工业大学管理学院,本节内容,概述 ValueType类 整型 浮点类型 十进制数 布尔型 自定义struct类型 枚举 装箱和拆箱,1、概述,所有值类型均隐式派生自System.ValueType(其基类是System.Object)。 值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在堆中。 值类型变量没有单独的堆分配或垃圾回收开销。,1、概述,值类型变量间的赋值,包括变量值的拷贝。 引用类型变量的赋值,只复制对对象的引用,而不复制对象本身。 值类型不能包含null值,但nullable类型允许赋null值 每种值类型都有隐式默认构造函数,用来初始

2、化该类型的默认值。,1、概述,在将值类型传递给输入参数为System.Object的方法时会发生装箱操作。 值类型主要由两类组成:结构struct、枚举enum。 结构分为以下几类:数值类型(如整型、浮点型、十进制型)、布尔型和用户定义的结构。,1、概述,所有的简单类型均为.NET Framework系统类型的别名。 例如,int是System.Int32的别名。 简单类型可使用文字初始化,例如,“A”是char类型的文字,而2001是int类型的文字。 内置数值类型是结构,它们具有可以访问的属性和方法。 byte b = Byte.MaxValue; / 类型Byte的静态方法,1、概述,可

3、以使用struct关键字创建自己的自定义值类型。通常,结构可作为一小组相关变量的容器,如: public struct CoOrds public int x, y; public CoOrds(int p1, int p2) x = p1; y = p2; ,1、概述,另一类值类型是enum。枚举定义一组已命名的整数常量。 例如,.NET Framework类库中的System.IO.FileMode枚举包含一组已命名的整数常量,用来指定如何打开文件。 public enum FileMode CreateNew = 1, Create = 2, Open = 3, OpenOrCreate

4、 = 4, Truncate = 5, Append = 6, ,1、概述,在阅读源代码时,名称可为人们提供更多有意义信息,故最好使用枚举而不使用常量文本数字。 所有枚举均派生于System.Enum,其基类为System.ValueType。所有适用于结构的规则同样也适用于枚举。,1、概述,初始化值类型 可以声明内置数值类型变量并向其赋值,如: byte num = 0 xA; int i = 5; / 直接赋初始值,推荐使用 int myInt; myInt = new int(); /调用类型的默认构造函数 / int myInt= new int(); /用同一语句进行声明和初始化 c

5、har c = Z; 可以声明未进行初始化的局部变量,但使用前必须初始化,否则不能使用该变量。 使用new运算符时,将调用特定类型的默认构造函数并对变量赋以默认值。,1、概述,对于用户定义的类型,使用new来调用默认构造函数。例如,下列语句调用了Point结构的默认构造函数: Point p = new Point(); / 调用Point结构的默认构造函数 此调用后,认为该结构已被明确赋值,因为该结构中的所有成员均已初始化为各自的默认值。,1、概述,2、ValueType类,提供值类型的基类 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) ValueTy

6、pe 用更合适值类型的实现重写了Object中的虚方法。,3、整型,3.1 sbyte关键字,Sbyte关键字表示整数数据类型,它存储的值如下表所示: 可使用下述方法声明并初始化sbyte类型的变量 sbyte sByte1 = 127; 在以上声明中,整数127从int隐式转换为sbyte。如果整数超出了sbyte的范围,将产生编译错误。,调用重载方法时必须使用强制转换,以保证调用正确的方法。例如, public static void SampleMethod(int i) public static void SampleMethod(sbyte b) SampleMethod(5);

7、/ 调用int参数的方法 SampleMethod(sbyte)5); /调用sbyte参数的方法 从sbyte到short、int、long、float、double或decimal有预定义隐式转换。 当目标变量具有相同或更大的存储大小时,可隐式转换,转换不会有精度损失; 当目标变量的存储大小更小时,将不能隐式转换,显式转换会有精度损失。,3.1 sbyte关键字,不存在浮点型到sbyte类型的隐式转换 不能将存储要求更大的非文字数值类型隐式转换为sbyte类型。例如, sbyte x = 10, y = 20; sbyte z = x + y; / 错误: 从int到sbyte转换,赋值运

8、算符右侧的算术表达式在默认情况下的计算结果为int。 sbyte z = (sbyte)(x + y); / OK: 显式转换 int m = x + y; long n = x + y; sbyte x = 3.0; / Error: 无double到sbyte的隐式转换 sbyte y = (sbyte)3.0; / OK: 显式转换,3.1 sbyte关键字,3.2 byte关键字,byte关键字代表一种整数数据类型 可如下例所示声明并初始化byte类型的变量: byte myByte = 255; 在声明中,整数255从int隐式转换为byte。 如整数超出byte范围,将产生编译错误

9、。,从byte到short、ushort、int、uint、long、ulong、float、double或decimal有预定义隐式转换。 不能将存储要求更大的的非文本数值类型隐式转换为byte。 与sbyte类似,调用重载方法时,必须使用显式转换。,3.2 byte关键字,byte x = 10, y = 20; / int到byte的转换错误。”=”右侧的算术表达式 /在默认情况下的计算结果为int类型 byte z = x + y; /可使用强制转换来解决 byte z = (byte)(x + y); /在目标变量具有相同或更大的存储大小时,通常没问题。 int m = x + y;

10、 long n = x + y; /不存在浮点型到byte类型的隐式转换。 byte x = 3.0; / 错误: byte y = (byte)3.0; / OK: 显式转换,3.2 byte关键字,3.3 short关键字,Short关键字表示整数数据类型 可如下例所示声明并初始化short类型的变量: short x = 32767; 在以上声明中,整数32767从int隐式转换为short。 如果整数的长度超过了short存储位置的大小,将产生编译错误。,存在从short到int、long、float、double或decimal的预定义隐式转换。 不能将存储要求更大的非文本数值类型隐

11、式转换为short类型,可使用强制转换来解决该问题。 在目标变量具有相同或更大的存储大小时,通常没问题。 不存在从浮点型到short类型的隐式转换,除非使用显式强制转换。 与前面类型类似,调用重载方法时必须使用强制转换。,3.3 short关键字,3.4 ushort关键字,ushort关键字表示整数数据类型 可如下例所示声明并初始化ushort类型变量: ushort myShort = 65535; 在以上声明中,整数65535从int隐式转换为ushort。 存在从ushort到int、uint、long、ulong、float、double或decimal的预定义隐式转换。 存在从by

12、te或char到ushort的预定义隐式转换。,不存在从浮点型到ushort类型的隐式转换,除非使用显式强制转换。 不能将存储要求更大的非文本数值类型隐式转换为ushort类型,可使用强制转换来解决该问题; 在目标变量具有相同或更大的存储大小时,通常没问题。 调用重载方法时,必须使用强制转换。,3.4 ushort关键字,3.5 int关键字,可以声明并初始化 int 类型的变量,例如: int i = 123; 如果整数没有后缀,则其类型为与其值相应的以下类型中的一个:int、uint、long、ulong。在此例中为int类型。,存在从int到long、float、double或decim

13、al的预定义隐式转换。 存在从sbyte、byte、short、ushort或char到int的预定义隐式转换。 不存在从浮点型到int类型的隐式转换,除非使用显式强制转换。,3.5 int关键字,uint关键字 不建议在C#中使用该类型; 可如下例所示声明并初始化uint类型的变量: uint myUint = 4294967290;/整数类型为uint uint uInt2 = 123U;/ uint Console.WriteLine(323442434344U.GetType();/ulong,3.6 uint关键字,当使用后缀U或u时,将根据文本的数值来确定文本的类型是uint还是u

14、long。 存在从uint到long、ulong、float、double或decimal的预定义隐式转换。 存在从byte、ushort或char到uint的预定义隐式转换。否则必须使用显式转换。 不存在从浮点型到 uint 类型的隐式转换,除非使用显式强制转换。,3.6 uint关键字,3.7 long关键字,可如下例所示声明并初始化long类型的变量: long long1 = 4294967296;/ long long long2 = 4294967296L;/ long,非ulong 如果整数没有后缀,则其类型为与其值相应的以下类型中的第一个类型:int、uint、long、ulo

15、ng。 在上例中,它是long类型,因为它超出了uint的范围。 当使用后缀L时,将根据整数的大小确定它的类型为long还是ulong。,“L”后缀常用于调用重载方法。 public static void SampleMethod(int i) public static void SampleMethod(long l) SampleMethod(5); / Calling the method with the int parameter SampleMethod(5L); / Calling the method with the long parameter 也可用小写字母“l”作后

16、缀。但是“l”容易与数字“1”混淆。为清楚起见,一般使用“L” 在同一表达式中,同时使用long类型和其他数值整型,这时表达式的计算结果为long类型,但在关系表达式或布尔表达式中为bool。 例如,898L + 88。,3.7 long关键字,存在从long到float、double或decimal的预定义隐式转换。其他情况下必须使用显式转换。 存在从sbyte、byte、short、ushort、int、uint或char到long的预定义隐式转换。 不存在从浮点型到long类型的隐式转换。,3.7 long关键字,3.8 Ulong关键字,可如下例所示声明并初始化ulong类型的变量: ulong uLong = 9223372036854775808; 如果整数没有后缀,则其类型为与其值相应以下类型中的第一个类型:int、uint、long、ulong。在上面的示例中,它是ulong类型。,根据以下规则使用后缀指定文字

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号