版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章数据类型、变量和常量为语言间互操作性提供基本框架的通用类型系统(CTS)的层次结构值类型、引用类型及其差异装箱和拆箱的基本概念变量的命名、声明、赋值、分类和作用域预定义基本数据类型的使用类型转换方法:隐式转换、显式转换(强制转换)和Convert类提供的类型转换方法2.1数据类型通用类型系统(CTS)定义了如何在运行库中声明、使用和管理类型类别说明值类型简单类型有符号整型:sbyte、short、int和
long无符号整型:byte、ushort、uint和
ulongUnicode字符型:charIEEE浮点型:float和
double高精度小数型:decimal布尔型:bool枚举类型enumE{...}形式的用户定义的类型结构类型structS{...}形式的用户定义的类型可以为
null的类型其他所有具有
null值的值类型的扩展引用类型类类型其他所有类型的最终基类:objectUnicode字符串型:stringclassC{...}形式的用户定义的类型接口类型interfaceI{...}形式的用户定义的类型
数组类型一维和多维数组,例如
int[]和
int[,]委托类型delegateintD(...)形式的用户定义的类型2.1.2值类型值类型(valuetype)的变量在堆栈(Stack)中直接包含其数据,每个变量都有自己的数据副本(除
ref和
out参数变量外),因此对一个变量的操作不影响另一个变量C#的值类型分为简单类型(simpletype)、枚举类型(enumtype)、结构类型(structtype)。还可以为
null的类型(nullabletype)2.1.3引用类型引用类型(referencetype)的变量在堆栈(Stack)中存储对数据(对象)的引用(地址),数据(对象)存储在托管运行环境管理的堆(Heap)中。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象C#的引用类型分为类类型(classtype)、接口类型(interfacetype)、数组类型(arraytype)和委托类型(delegatetype)【例2.1】值类型与引用类型之间的区别示例变量val1、val2为值类型;ref1、ref2为引用类型。比较其运行结果和内存分配示意图2.1.4装箱和拆箱C#中所有的类型都继承于System.Object根类型,而所有的值类型都继承于System.ValueType类型通过装箱(boxing)和拆箱(unboxing)机制,可以实现值类型和引用类型之间的转换装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型【例2.2】装箱(boxing)和拆箱(unboxing)示例2.2变量-变量的命名规则变量名的第一个字符必须是字母、下划线(“_”)或@,其后的字符可以是字母、下划线或数字。注意,C#定义的关键字不能用作变量名。但可以定义@加关键字的变量名myVar、_strName、obj1、@namespace为正确的变量名99var、It'sOK、namespace为错误的变量名.NETFramework一般遵循两种命名约定:PascalCase和camelCase在获取变量的值之前,变量必须已明确赋值(definitelyassigned)2.2.2变量的声明和赋值声明变量:变量类型变量名;变量赋值:变量
=要赋的值;C#变量被访问之前必须被初始化;否则编译时会报错。因此,不可能访问一个未初始化变量【例2.3】变量的声明和赋值示例2.2.3变量的分类C#中,变量分为七种类型:静态变量(staticvariables)、非静态变量(也即实例变量instancevariables)、数组元素(arrayelements)、值参数(valueparameters)、引用参数(referenceparameters)、输出参数(outputparameters)和局部变量(localvariables)2.2.4变量的作用域1.局部变量的作用域局部变量存在于表示声明该变量的块语句或方法结束的封闭花括号之前的作用域内在for、while或类似语句中声明的局部变量存在于该循环体内2.局部变量的作用域冲突同名的局部变量不能在同一作用域内声明两次3.字段和局部变量的作用域冲突在类的方法中可以定义与已定义的字段名相同的局部变量,而不产生冲突【例2.4】变量的作用域示例2.3常量在声明和初始化变量时,在变量的前面加上关键字const,就可以把该变量指定为一个常量。常量的命名规则一般采用大写字母常量必须在声明时初始化;指定了其值后,不能再对其进行赋值修改;常量总是静态的,但不必(不允许)包含修饰符static【例2.5】常量的声明和赋值示例2.4预定义数据类型C#的内置值类型表示基本数据类型,包括整型、浮点类型、decimal类型、bool类型和字符类型。C#支持两个预定义的引用类型:object和string2.4.1整型C#支持8个预定义整数类型,如表2-2所示,分别支持8位、16位、32位和64位整数值的有符号和无符号的形式【例2.6】整型变量示例名称CTS类型说明范围sbyteSystem.SByte8位有符号整数–128到127shortSystem.Int1616位有符号整数–32768到32767intSystem.Int3232位有符号整数–2147483648到2147483647longSystem.Int6464位有符号整数–9223372036854775808到9223372036854775807byteSystem.Byte8位无符号整数0到255ushortSystem.Uint1616位无符号整数0到65535uintSystem.Uint3232位无符号整数0到4294967295ulongSystem.Uint6464位无符号整数0到184467440737095516152.4.2浮点类型C#支持2种浮点数据类型(float和double),用于包含小数的计算【例2.7】浮点类型变量示例名称CTS类型说明位数范围(大致)floatSystem.Single32位单精度浮点数7±1.5×10-45到±3.4×1038doubleSystem.Double64位双精度浮点数15/16±5.0×10-324到±1.7×103082.4.3decimal类型C#支持高精度小数类型(decimal),如表2-6所示。decimal数据类型一般用于财务计算,即可以用较大的精确度来表示货币值【例2.8】decimal类型变量示例名称CTS类型说明位数范围(大致)decimalSystem.Decimal128位高精度十进制数表示法28/29±1.0×10-28到±7.9×10282.4.4bool类型C#的bool数据类型用于逻辑运算,包含bool值true或false【例2.9】布尔类型变量示例名称CTS类型说明值boolSystem.Boolean布尔类型true或false2.4.5字符类型C#的char数据类型用于保存单个字符的值C#语言中,字符使用单引号括起来(例如'A');也可以使用4位16进制的Unicode值(例如'\u0041'),带有数据类型转换的整数值(例如(char)65),或16进制数('\x0041')表示它们。特殊符号则需要使用转义序列表示【例2.10】字符类型变量示例名称CTS类型说明值charSystem.Char字符类型表示一个16位的(Unicode)字符2.4.6object类型object类型是C#编程语言的类层次结构的根类型,object是System.Object的别名,所有的类型都隐含地最终派生于System.Object类object类型主要可以用于两个目的:可以使用object引用绑定任何类型的对象;object类型执行许多基本的一般用途的方法,包括Equals()、GetHashCode()、GetType()和ToString()等名称CTS类说明objectSystem.Object根类型,CTS中的其他类型都是从它派生而来的(包括值类型)2.4.7string类型C#字符串处理使用string(System.String的别名)类型表示零或更多Unicode字符组成的序列string是引用类型C#支持两种形式的字符串正则字符串(regularstring)包含在双引号中的零个或多个字符组成(如"hello"),并且可以包含简单转义序列(如表示制表符的\t)、十六进制转义序列和Unicode转义序列原义字符串(verbatimstring)由@字符后跟开始的双引号字符、零个或多个字符以及结束的双引号字符组成。一个简单的示例就是
@"hello“【例2.11】字符串类型变量示例2.4.8可以为null的类型可以为null的类型表示可被赋值为null值的值类型变量,其取值范围为其基础值类型正常范围内的值,再加上一个null值。例如,bool?(Nullable<bool>)的值包括true、false或null可以为null的类型通常用于包含不可赋值的元素的数据类型可以为null的类型的声明语法为T?x;或Nullable<T>x;其中的T为值类型。语法T?是Nullable<T>的简写。可以为null的类型赋值的方法与为一般值类型赋值的方法相同。例如:int?x=10;【例2.12】可以为null的类型示例2.5类型转换隐式转换只允许发生在从小的值范围的类型到大的值范围的类型的转换,转换后的数值大小不受影响,然而,从int、uint或long到float的转换以及从long到double的转换的精度可能会降低转换源转换目标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.5.2显式转换(强制转换)显式强制转换调用转换运算符,从一种类型转换为另一种类型。如果未定义相应的转换运算符,则强制转换会失败。可以编写自定义转换运算符,在用户定义类型之间进行转换显式数值转
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论