c数据类型与流程控制

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2章数据类型与流程控制2.1数据类型2.1.1C#数据类型的分类为了方便识别和处理,编程语言系统中的不同信息在计算机中具有不同的表示,占用不同的储存空间,这些信息在语言系统中称之为数据类型。C#中的数据类型和C++是类似的。但在C#中数据类型分为两种:值类型和引用类型,如图2-1所示。值类型包括一些数值类型(例如int和float)、char、枚举类型和结构类型。引用类型包括类、接口、委托(delegate)和数组类型。在C#中,内置数据类型除了字符串(string)类型与对象(object)类型外,其余均为值类型。2.1数据类型C#中的数据类型的划分如图2-1所示。数据类型值类型引用类型简单类型枚举类型结构类型数值类型字符类型布尔类型整数类型实数类型类类型委托类型接口类型数组类型2.1数据类型值类型和引用类型的区别在于:值类型变量直接存储在堆栈中,且占用空间大小相对固定,变量直接包含他们的数据,可以直接访问其值,访问速度快;而引用类型数据需要通过存储在栈中的引用来间接访问其值,实际内容存储在内存的堆中,占用空间大小不固定,访问速度慢。表2-1所示为值类型和引用类型的区别。特性值类型引用类型变量中保存的内容实际数据指向实际数据的引用指针内存空间配置堆栈受管制的堆内存需求较少较多执行效率较快较慢内存释放时间点执行超过定义变量的作用域时由垃圾回收机制负责回收2.1数据类型1.整数类型整数类型(也叫整型)表示无小数部分的数字。根据变量在内存中所占的位数不同,C#将整型分为8种:字节型(sbyte)、无符号字节型(byte)、短整型(short)、无符号短整型(ushort)、整型(int)、无符号整型(uint)、长整型(long)、无符号长整型(ulong)。整型的说明及示例如表2-2所示。2.1数据类型表2-2整数类型的关键字及说明关键字.NET类型说明示例sbyteSystem.Sbyte8位有符号整型,取值-128~127sbyteval=12;byteSystem.Byte8位无符号整型,取值0~255shortval=12;intSystem.Int3232位有符号整型,取值-231~231-1intval=12;uintSystem.UInt3232位无符号整型,取值0~232-1uintval1=12;uintval2=32U;shortSystem.Int1616位有符号整型,取值-215~215-1shortval1=12;ushortSystem.UInt1616位无符号整型,取值0~216-1ushortval1=12;longSystem.Int6464位有符号整型,取值-263~263-1longval1=12;longval2=12L;ulongSystem.UInt6464位无符号整型,取值0~264-1ulongval1=23;ulongval2=23U;ulongval3=56L;2.1数据类型2.实数类型C#中的实数类型有3种:float、double、decimal。其中double的取值范围最广,decimal取值范围其次,但它的精度高。具体见表2-3。表2-3实数类型的关键字及说明关键字.NET类型说明示例floatSystem.Float32位单精度浮点型,±1.5×10-45~3.4×1038,精度为7位floatval=12.3F;doubleSystem.Double64位双精度浮点型,±5.0×10-324~1.7×10308,精度为15~16位doubleval=23.12D;decimalSystem.Decimal128位小数类型,1.0×10-28到~7.9×1028精度为28~29位decimalval=1.23M;2.1数据类型3.字符类型和字符串类型字符类型也叫字符型,用char表示,为单个Unicode字符,一个Unicode字符的标准长度为两个字节,它在机器中占16位,其范围为0~65535。字符一般是用单引号括起来的一个字符,如:'a','A',也可以写成转义字符、十六进制转换码或Unicode表示形式。此外,整数也可以显式地转换为字符。2.1数据类型常用的转义字符如表2-4所示。转义符字符名字符的Unicode值转义符字符名字符的Unicode值\'单引号0x0027\f换页0x000c\双引号0x0022\n新行0x000A\\反斜杠0x005c\r回车0x000D\0空字符0x0000\t水平制表符0x0009\a警告(产生蜂鸣)0x0007\v垂直制表符0x000B\b退格0x00082.1数据类型4.布尔类型布尔型主要用于逻辑判断,这种类型的数据只有true和false两个值。在C++中,false相当于0,true相当于1。但在C#中,废弃了这种不正规的表达方式,true值不能被任何非零值取代,将整数类型转换为布尔类型是不合法的。例如:boolx=1;//错误,不存在这种写法booly=1;//错误,不存在这种写法boolx=true;//正确,可以被执行2.1数据类型5.枚举类型枚举类型是值类型的一种特殊形式,它从System.Enum继承而来,并为基础类型的值(如Byte、Int32或UInt64)提供替代名称。枚举类型也是一种自定义数据类型,它允许用符号代表数据。枚举是指程序中某个变量具有一组确定的值,通过“枚举”可以将其值一一列出来。enum关键字用于声明枚举类型,基本格式如下:enum枚举类型名{由逗号分隔的枚举数标识符};2.1数据类型【例2-1】枚举类型示例。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceex01{classProgram{enumweek{monday,tuesday,wednesday,thursday,friday,saturday,sunday};staticvoidMain(string[]args){weekday=week.thursday;inta=(int)day;intb=(int)week.sunday;Console.WriteLine(a={0},b={1},a,b);Console.ReadLine();}}}2.1数据类型6.结构类型结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数、常数、字段、方法、属性、索引器等。结构与类不同在于结构为值类型而不是引用类型,并且结构不支持继承。结构类型将在第4章讲解。2.2不同数据类型之间的转换2.2.1显式转换与隐式转换1.隐式转换C#是一个强类型的语言,它的数值类型有一些可以进行隐式转换,其他的必须显式转换,隐式转换的类型只能是长度短的类型转换成长的类型(见表2-5所示),例如int可以转换成long,float,double,decimal;反之必须显式的转换。例如:inta=7;floatb=a;//隐式转换a=(int)c;//显示转换2.2不同数据类型之间的转换表2-5C#中支持的隐式转换源类型目标类型sbyteshort、int、long、float、double、decimalbyteshort、ushort、int、uint、long、ulong、float、double、decimalshortint、long、float、double、decimalushortint、uint、long、ulong、float、double、decimalintlong、float、double、decimaluintlong、ulong、float、double、decimallongfloat、double、decimalulongfloat、double、decimalcharushort、int、uint、long、ulong、float、double、decimalfloatdouble2.2不同数据类型之间的转换2.显式转换显式转换又叫强制类型转换,与隐式转换相反,显式转换需要用户明确地指定转换类型,一般在不存在该类型的隐式转换时才使用。格式如下:(类型标识符)表达式其作用是将“表达式”值的类型转换为“类型标识符”的类型。例如:(int)1.23//把double类型的1.23转换成int类型,结果为12.2不同数据类型之间的转换使用上面的显示转换不能用在bool和string类型上,如果希望string或者bool类型和整数类型之间的转化可以使用一个方法Convert。格式如下:Convert.方法名(参数)方法名是To数据类型形式,具体含义见表2-6。2.2不同数据类型之间的转换表2-6Convert.方法含义方法名含义ToBoolean将数据转换成Boolean类型ToDataTime将数据转换成日期时间类型ToInt16将数据转换成16位整数类型ToInt32将数据转换成32位整数类型ToInt64将数据转换成64位整数类型ToNumber将数据转换成Double类型ToObject将数据转换成Object类型ToString将数据转换成string类型ToBoolean将数据转换成Boolean类型2.2不同数据类型之间的转换2.2.2装箱和拆箱对于值类型和Object类型之间的转换,可以用装箱技术和拆箱技术来实现。C#中的任何类型的值都可以按照对象来处理,使用object类型的通用库(如.NETFramework中的集合类)既可以用于引用类型,又可以用于值类型。(1)Object类Object类是所有类的基类,它是System命名空间下的一个类,C#中所有的类型都是直接或间接地从Object类继承而来。因为它是所有对象的基类,所以可把任何类型的值赋给它,例如,一个整型:objecttheObj=123;2.2不同数据类型之间的转换1.装箱转换装箱转换是指将一个值类型的数据隐式地转换成一个对象类型的数据。把一个值类型装箱,就是创建一个object类型的实例,并把该值类型的值复制给这个object实例。例如,下面语句就执行了装箱转换:inti=123;objectobj=i;//装箱转换2.2不同数据类型之间的转换上面的两条语句中,第1条语句先声明一个整型变量i并对其赋值,第2条语句则先创建一个object类型的实例obj,然后将i的值复制给obj。装箱操作过程如图2-2所示。在执行装箱转换时,也可以使用显式转换,如:objectobj=(object)i;2.2不同数据类型之间的转换2.拆箱转换拆箱转换是指将一个对象类型的数据显式地转换成一个值类型数据。例如,下面语句就执行了拆箱转换:inti=123;objectobj=i;intj=(int)obj;//拆箱转换拆箱操作的过程如图2-3所示。拆箱转换需要(而且必须)执行显式转换,这是它与装箱转换的不同之处。2.3常量和变量2.3.1常量常量就是值在程序整个生命周期内值始终不变的量。在声明常量时,要用到const关键字,和C++类似。常量在使用的过程中,不可以对其进行赋值的改变,否则系统会自动报错。常量声明的基本语法为:const[int/double/long/bool/string/……]常量名;下面是一个具体声明常量的例子:constdoublePI=3.1415926;2.3常量和变量2.3.2变量变量代表了存储单元,每个变量都有一个数据类型。这决定了这个变量可以存储什么值。在任何一种语言中,变量的命名都是有一定的规则的,当然C#.NET也不例外,若在使用中定义了不符合一定规则的变量,C#.NET语言系统会自动报错。变量命名规则如下:(1)变量名的第一个字符必须是字母、下划线(_)或者@。(2)除去第一个字母外,其余的

1 / 57
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功