《c数据类型与流程控制44194.pptx》由会员分享,可在线阅读,更多相关《c数据类型与流程控制44194.pptx(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2 章 数据类型与流程控制2.1 数据类型 2.1.1 C#2.1.1 C#数据类型的分类数据类型的分类 为了方便识别和处理,编程语言系统中的不同信息在计算 为了方便识别和处理,编程语言系统中的不同信息在计算机中具有不同的表示,占用不同的储存空间,这些信息在 机中具有不同的表示,占用不同的储存空间,这些信息在语言系统中称之为数据类型。语言系统中称之为数据类型。C#C#中的数据类型和 中的数据类型和C+C+是类似的。但在 是类似的。但在C#C#中数据类型分 中数据类型分为两种:值类型和引用类型,如图 为两种:值类型和引用类型,如图2-1 2-1 所示。值类型包括 所示。值类型包括一些数值类型(
2、例如 一些数值类型(例如int int 和 和float float)、)、char char、枚举类型和结构、枚举类型和结构类型。引用类型包括类、接口、委托 类型。引用类型包括类、接口、委托(delegate)(delegate)和数组类 和数组类型。在 型。在C#C#中,内置数据类型除了字符串(中,内置数据类型除了字符串(string string)类型与)类型与对象(对象(object object)类型外,其余均为值类型。)类型外,其余均为值类型。2.1 数据类型 C#中的数据类型的划分如图2-1 所示。2.1 数据类型 值类型和引用类型的区别在于:值类型变量直接存储在 值类型和引用类
3、型的区别在于:值类型变量直接存储在堆栈中,且占用空间大小相对固定,变量直接包含他们 堆栈中,且占用空间大小相对固定,变量直接包含他们的数据,可以直接访问其值,访问速度快;而引用类型 的数据,可以直接访问其值,访问速度快;而引用类型数据需要通过存储在栈中的引用来间接访问其值,实际 数据需要通过存储在栈中的引用来间接访问其值,实际内容存储在内存的堆中,占用空间大小不固定,访问速 内容存储在内存的堆中,占用空间大小不固定,访问速度慢。度慢。表 表2-1 2-1 所示为值类型和引用类型的区别。所示为值类型和引用类型的区别。特性 特性 值类型 值类型 引用类型 引用类型变量中保存的内容 变量中保存的内容
4、 实际数据 实际数据 指向实际数据的引用指针 指向实际数据的引用指针内存空间配置 内存空间配置 堆栈 堆栈 受管制的堆 受管制的堆内存需求 内存需求 较少 较少 较多 较多执行效率 执行效率 较快 较快 较慢 较慢内存释放时间点 内存释放时间点 执行超过定义变量的作用域时 执行超过定义变量的作用域时 由垃圾回收机制负责回收 由垃圾回收机制负责回收2.1 数据类型 1 整数类型 整数类型(也叫整型)表示无小数部分的数字。根据变量 整数类型(也叫整型)表示无小数部分的数字。根据变量在内存中所占的位数不同,在内存中所占的位数不同,C#C#将整型分为 将整型分为8 8 种:字节型 种:字节型(sbyt
5、e sbyte)、无符号字节型()、无符号字节型(byte byte)、短整型()、短整型(short short)、)、无符号短整型(无符号短整型(ushort ushort)、整型()、整型(int int)、无符号整型)、无符号整型(uint uint)、长整型()、长整型(long long)、无符号长整型()、无符号长整型(ulong ulong)。整)。整型的说明及示例如表 型的说明及示例如表2-2 2-2 所示。所示。2.1 数据类型表表2-2 2-2 整数类型的关键字及说明整数类型的关键字及说明关键字 关键字.NET.NET 类型 类型 说 说 明 明 示 示 例 例sbyte
6、 sbyte System.Sbyte System.Sbyte 8 8位有符号整型,取值 位有符号整型,取值128127 128127 sbyte val=12;sbyte val=12;byte byte System.Byte System.Byte 8 8位无符号整型,取值 位无符号整型,取值0255 0255 short val=12;short val=12;int int System.Int32 System.Int32 32 32位有符号整型,取值 位有符号整型,取值-2-231 312 231 31-1-1 int val=12;int val=12;uint uint S
7、ystem.UInt32 System.UInt32 32 32位无符号整型,取值 位无符号整型,取值02 0232 32-1-1uint val1=12;uint val1=12;uint val2=32U;uint val2=32U;short short System.Int16 System.Int16 16 16位有符号整型,取值 位有符号整型,取值-2-215 152 215 15-1-1 short val1=12;short val1=12;ushort ushort System.UInt16 System.UInt16 16 16位无符号整型,取值 位无符号整型,取值02
8、0216 16-1-1 ushort val1=12;ushort val1=12;long long System.Int64 System.Int64 64 64位有符号整型,取值 位有符号整型,取值-2-263 632 263 63-1-1long val1=12;long val1=12;long val2=12L;long val2=12L;ulong ulong System.UInt64 System.UInt64 64 64位无符号整型,取值 位无符号整型,取值02 0264 64-1-1ulong val1=23;ulong val1=23;ulong val2=23U;ul
9、ong val2=23U;ulong val3=56L;ulong val3=56L;2.1 数据类型22实数类型实数类型 C#C#中的实数类型有 中的实数类型有3 3 种:种:float float、double double、decimal decimal。其中。其中double double 的取值范围最广,的取值范围最广,decimal decimal 取值范围其次,但它的 取值范围其次,但它的精度高。具体见表 精度高。具体见表2-3 2-3。表 表2-3 2-3 实数类型的关键字及说明 实数类型的关键字及说明关键字 关键字.NET.NET 类型 类型 说 说 明 明 示 示 例 例f
10、loat floatSystem.Fl System.Float oat32 32位单精度浮点型,位单精度浮点型,1.510 1.510-45-45 3.410 3.41038 38,精度为,精度为7 7位 位float val=12.3F;float val=12.3F;double doubleSystem.Do System.Double uble64 64位双精度浮点型,位双精度浮点型,5.010 5.010-324-324 1.710 1.710308 308,精度为,精度为15 15 16 16位 位double val=23.12D;double val=23.12D;decim
11、al decimalSystem.De System.Decimal cimal128 128位小数类型,位小数类型,1.010 1.010-28-28到 到7.910 7.91028 28精度为 精度为28 28 29 29位 位decimal val=1.23M;decimal val=1.23M;2.1 数据类型33字符类型和字符串类型字符类型和字符串类型 字符类型也叫字符型,用 字符类型也叫字符型,用char char 表示,为单个 表示,为单个Unicode Unicode 字 字符,一个 符,一个Unicode Unicode 字符的标准长度为两个字节,它在机 字符的标准长度为两个
12、字节,它在机器中占 器中占16 16 位,其范围为 位,其范围为0 0 65535 65535。字符一般是用单引号。字符一般是用单引号括起来的一个字符,如:括起来的一个字符,如:a a,A A,也可以写成转义字,也可以写成转义字符、十六进制转换码或 符、十六进制转换码或Unicode Unicode 表示形式。此外,整数 表示形式。此外,整数也可以显式地转换为字符。也可以显式地转换为字符。2.1 数据类型常用的转义字符如表 常用的转义字符如表2-4 2-4 所示。所示。转义符 转义符 字 字 符 符 名 名 字符的 字符的Unicode Unicode 值 值转义符 转义符 字 字 符 符 名
13、 名 字符的 字符的Unicode Unicode 值 值 单引号 单引号 0 x0027 0 x0027 f f 换页 换页 0 x000c 0 x000c 双引号 双引号 0 x0022 0 x0022 n n 新行 新行 0 x000A 0 x000A 反斜杠 反斜杠 0 x005c 0 x005c r r 回车 回车 0 x000D 0 x000D0 0 空字符 空字符 0 x0000 0 x0000 t t 水平制表符 水平制表符 0 x0009 0 x0009a a 警告(产生蜂鸣)警告(产生蜂鸣)0 x0007 0 x0007 v v 垂直制表符 垂直制表符 0 x000B 0
14、x000Bb b 退格 退格 0 x0008 0 x00082.1 数据类型44布尔类型布尔类型布尔型主要用于逻辑判断,这种类型的数据只有布尔型主要用于逻辑判断,这种类型的数据只有truetrue和和falsefalse两个值。在两个值。在C+C+中,中,falsefalse相当于相当于00,truetrue相当于相当于11。但在。但在C#C#中,废弃了这种不正规的表中,废弃了这种不正规的表达方式,达方式,truetrue值不能被任何非零值取代,将整数值不能被任何非零值取代,将整数类型转换为布尔类型是不合法的。例如:类型转换为布尔类型是不合法的。例如:bool x=1;/bool x=1;/错
15、误,不存在这种写法错误,不存在这种写法bool y=1;/bool y=1;/错误,不存在这种写法错误,不存在这种写法bool x=true;/bool x=true;/正确,可以被执行正确,可以被执行2.1 数据类型55枚举类型枚举类型枚举类型是值类型的一种特殊形式,它从枚举类型是值类型的一种特殊形式,它从System.EnumSystem.Enum继承而来,并为基础类型的值(如继承而来,并为基础类型的值(如ByteByte、Int32Int32或或UInt64UInt64)提供替代名称。枚举类型)提供替代名称。枚举类型也是一种自定义数据类型,它允许用符号代表数也是一种自定义数据类型,它允许
16、用符号代表数据。枚举是指程序中某个变量具有一组确定的值,据。枚举是指程序中某个变量具有一组确定的值,通过通过“枚举枚举”可以将其值一一列出来。可以将其值一一列出来。enumenum关键字用于声明枚举类型,基本格式如下:关键字用于声明枚举类型,基本格式如下:enum enum 枚举类型名枚举类型名 由逗号分隔的枚举数标识符由逗号分隔的枚举数标识符;2.1 数据类型【例【例2-1 2-1】枚举类型示例。】枚举类型示例。using System;using System;using System.Collections.Generic;using System.Collections.Generic
17、;using System.Linq;using System.Linq;using System.Text;using System.Text;namespace ex01 namespace ex01 class Program class Program enum week monday,tuesday,wednesday,thursday,friday,saturday,sunday;enum week monday,tuesday,wednesday,thursday,friday,saturday,sunday;static void Main(string args)static
18、 void Main(string args)week day=week.thursday;week day=week.thursday;int a=(int)day;int a=(int)day;int b=(int)week.sunday;int b=(int)week.sunday;Console.WriteLine(a=0,b=1,a,b);Console.WriteLine(a=0,b=1,a,b);Console.ReadLine();Console.ReadLine();2.1 数据类型 6 结构类型 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数、常
19、数、字段、方法、属性、索引器等。结构与类不同在于结构为值类型而不是引用类型,并且结构不支持继承。结构类型将在第4 章讲解。2.2 不同数据类型之间的转换 2.2.1 2.2.1 显式转换与隐式转换显式转换与隐式转换 1.1.隐式转换隐式转换C#C#是一个强类型的语言,它的数值类型有一些可是一个强类型的语言,它的数值类型有一些可以进行隐式转换,其他的必须显式转换,隐式转以进行隐式转换,其他的必须显式转换,隐式转换的类型只能是长度短的类型转换成长的类型换的类型只能是长度短的类型转换成长的类型(见表(见表2-52-5所示),例如所示),例如intint可以转换成可以转换成longlong,float
20、float,doubledouble,decimaldecimal;反之必须显式的转换。例如:;反之必须显式的转换。例如:int a=7;int a=7;float b=a;/float b=a;/隐式转换隐式转换 a=(int)c;/a=(int)c;/显示转换显示转换 2.2 不同数据类型之间的转换 表2-5 C#中支持的隐式转换源类型 源类型 目标类型 目标类型sbyte sbyte short short、int int、long long、float float、double double、decimal decimalbyte byte short short、ushort ush
21、ort、int int、uint uint、long long、ulong ulong、float float、double double、decimal decimalshort short int int、long long、float float、double double、decimal decimalushort ushort int int、uint uint、long long、ulong ulong、float float、double double、decimal decimalint int long long、float float、double double、decim
22、al decimaluint uint long long、ulong ulong、float float、double double、decimal decimallong long float float、double double、decimal decimalulong ulong float float、double double、decimal decimalchar char ushort ushort、int int、uint uint、long long、ulong ulong、float float、double double、decimal decimalfloat fl
23、oat double double2.2 不同数据类型之间的转换 2.显式转换 显式转换又叫强制类型转换,与隐式转换相反,显式转换需要用户明确地指定转换类型,一般在不存在该类型的隐式转换时才使用。格式如下:(类型标识符)表达式 其作用是将“表达式”值的类型转换为“类型标识符”的类型。例如:(int)1.23/把double 类型的1.23 转换成int 类型,结果为12.2 不同数据类型之间的转换 使用上面的显示转换不能用在 使用上面的显示转换不能用在bool bool 和 和string string 类型上,如果 类型上,如果希望 希望string string 或者 或者bool boo
24、l 类型和整数类型之间的转化可以使用 类型和整数类型之间的转化可以使用一个方法 一个方法Convert Convert。格式如下:。格式如下:Convert.Convert.方法名 方法名(参数 参数)方法名是 方法名是To To 数据类型形式,具体含义见表 数据类型形式,具体含义见表2-6 2-6。2.2 不同数据类型之间的转换 表 表2-6 Convert.2-6 Convert.方法含义 方法含义方法名 方法名 含义 含义ToBoolean ToBoolean 将数据 将数据 转换 转换 成 成Boolean Boolean 类 类 型 型ToDataTime ToDataTime将数据
25、 将数据 转换 转换 成日期 成日期 时间类 时间类 型 型ToInt16 ToInt16 将数据 将数据 转换 转换 成 成16 16 位整数 位整数 类 类 型 型ToInt32 ToInt32 将数据 将数据 转换 转换 成 成32 32 位整数 位整数 类 类 型 型ToInt64 ToInt64 将数据 将数据 转换 转换 成 成64 64 位整数 位整数 类 类 型 型ToNumber ToNumber 将数据 将数据 转换 转换 成 成Double Double 类 类 型 型ToObject ToObject 将数据 将数据 转换 转换 成 成Object Object 类 类
26、 型 型ToString ToString 将数据 将数据 转换 转换 成 成string string 类 类 型 型ToBoolean ToBoolean 将数据 将数据 转换 转换 成 成Boolean Boolean 类 类 型 型2.2 不同数据类型之间的转换2.2.2 2.2.2 装箱和拆箱装箱和拆箱 对于值类型和 对于值类型和Object Object 类型之间的转换,可以用装箱技术和 类型之间的转换,可以用装箱技术和拆箱技术来实现。拆箱技术来实现。C#C#中的任何类型的值都可以按照对象 中的任何类型的值都可以按照对象来处理,使用 来处理,使用object object 类型的通
27、用库(如 类型的通用库(如.NET Framework.NET Framework 中 中的集合类)既可以用于引用类型,又可以用于值类型。的集合类)既可以用于引用类型,又可以用于值类型。(1 1)Object Object 类 类 Object Object 类是所有类的基类,它是 类是所有类的基类,它是System System 命名空间下的一个 命名空间下的一个类,类,C#C#中所有的类型都是直接或间接地从 中所有的类型都是直接或间接地从Object Object 类继承而 类继承而来。因为它是所有对象的基类,所以可把任何类型的值赋 来。因为它是所有对象的基类,所以可把任何类型的值赋给它,
28、例如,一个整型:给它,例如,一个整型:object theObj=123;object theObj=123;2.2 不同数据类型之间的转换 1.装箱转换 装箱转换是指将一个值类型的数据隐式地转换成一个对象类型的数据。把一个值类型装箱,就是创建一个obj ect 类型的实例,并把该值类型的值复制给这个obj ect 实例。例如,下面语句就执行了装箱转换:int i=123;object obj=i;/装箱转换2.2 不同数据类型之间的转换 上面的两条语句中,第 上面的两条语句中,第1 1 条语句先声明一个整型变量 条语句先声明一个整型变量i i 并对 并对其赋值,第 其赋值,第2 2 条语句则
29、先创建一个 条语句则先创建一个obj ect obj ect 类型的实例 类型的实例obj obj,然后将 然后将i i 的值复制给 的值复制给obj obj。装箱操作过程如图。装箱操作过程如图2-2 2-2 所示。所示。在执行装箱转换时,也可以使用显式转换,如:在执行装箱转换时,也可以使用显式转换,如:object obj=(object)i;object obj=(object)i;2.2 不同数据类型之间的转换2.2.拆箱转换拆箱转换拆箱转换是指将一个对象类型的数据显式地转换拆箱转换是指将一个对象类型的数据显式地转换成一个值类型数据。例如,下面语句就执行了拆成一个值类型数据。例如,下面语
30、句就执行了拆箱转换:箱转换:int i=123;int i=123;object obj=i;object obj=i;int j=(int)obj;/int j=(int)obj;/拆箱转换拆箱转换拆箱操作的过程如图拆箱操作的过程如图2-32-3所示。拆箱转换需要(而所示。拆箱转换需要(而且必须)执行显式转换,这是它与装箱转换的不且必须)执行显式转换,这是它与装箱转换的不同之处。同之处。2.3 常量和变量2.3.1 2.3.1 常量常量 常量就是值在程序整个生命周期内值始终不变的量。在声 常量就是值在程序整个生命周期内值始终不变的量。在声明常量时,要用到 明常量时,要用到const cons
31、t 关键字,和 关键字,和C+C+类似。常量在使 类似。常量在使用的过程中,不可以对其进行赋值的改变,否则系统会自 用的过程中,不可以对其进行赋值的改变,否则系统会自动报错。动报错。常量声明的基本语法为:常量声明的基本语法为:const int/double/long/bool/string/const int/double/long/bool/string/常量名 常量名;下面是一个具体声明常量的例子:下面是一个具体声明常量的例子:const double PI=3.1415926;const double PI=3.1415926;2.3 常量和变量 2.3.2 2.3.2 变量 变量 变
32、量代表了存储单元,每个变量都有一个数据类型。这决 变量代表了存储单元,每个变量都有一个数据类型。这决定了这个变量可以存储什么值。在任何一种语言中,变量 定了这个变量可以存储什么值。在任何一种语言中,变量的命名都是有一定的规则的,当然 的命名都是有一定的规则的,当然 C#.NET C#.NET 也不例外,若 也不例外,若在使用中定义了不符合一定规则的变量,在使用中定义了不符合一定规则的变量,C#.NET C#.NET 语言系 语言系统会自动报错。统会自动报错。变量命名规则如下:变量命名规则如下:(1 1)变量名的第一个字符必须是字母、下划线()变量名的第一个字符必须是字母、下划线(_ _)或)或
33、者 者。(2 2)除去第一个字母外,其余的字母可以是字母、数字、)除去第一个字母外,其余的字母可以是字母、数字、下划线的组合。下划线的组合。(3 3)不可以使用对)不可以使用对C#C#编译器而言有特定含义的名字 编译器而言有特定含义的名字(即 即C#C#语言的库函数名称和关键字名称 语言的库函数名称和关键字名称)作为变量名,如 作为变量名,如using using、namespace namespace、struct struct 等等。等等。2.3 常量和变量 2.3.3 变量的作用范围(作用域)变量不但有类型,还有作用范围。变量的作用范围就是应用程序中可以使用和操作变量的部分。变量的作用域
34、和C+类似,分为局部作用域和类作用域。(1)局部作用域 方法(即函数)中声明的任何变量都具有那个方法的作用域;一旦方法结束,它们也会消失,而且只能由那个方法内部执行的代码来访问。2.3 常量和变量 这些变量称为局部变量 这些变量称为局部变量(local variable)(local variable),因为它们局限于,因为它们局限于声明它们的那个方法,不能在其他任何方法中使用。换言 声明它们的那个方法,不能在其他任何方法中使用。换言之不能使用局部变量在不同的方法之间共享信息。例如:之不能使用局部变量在不同的方法之间共享信息。例如:class Example class Example voi
35、d firstMethod()void firstMethod()int myVar;int myVar;.void anotherMethod()void anotherMethod()myVar=42;/myVar=42;/错误 错误 变量越界 变量越界.2.3 常量和变量(2 2)类作用域)类作用域 在类中 在类中(但不在一个方法中 但不在一个方法中)声明的任何变量都具有那个类 声明的任何变量都具有那个类的作用域。例如:的作用域。例如:class Example class Example int myField=0;int myField=0;void firstMethod()voi
36、d firstMethod()myField=42;/myField=42;/正确 正确.void anotherMethod()void anotherMethod()myField=42;/myField=42;/正确 正确.2.4 运算符与表达式 2.4.1 2.4.1 运算符 运算符 运算符指明了进行运算的类型,例如,加号(运算符指明了进行运算的类型,例如,加号(+)用于加)用于加法、减号(法、减号(-)用于减法、星号()用于减法、星号(*)用于乘法、正斜杠)用于乘法、正斜杠(/)则用于除法等。)则用于除法等。1 1 算术运算符 算术运算符 算术运算符包括:算术运算符包括:*(乘法运算
37、符)、(乘法运算符)、/(除法运算符)、(除法运算符)、%(求余运算符,如(求余运算符,如7%3=1 7%3=1)、)、+(加法运算符)、(加法运算符)、(减(减法运算符)、法运算符)、+(增量运算符)和(增量运算符)和-(减量运算符)。(减量运算符)。2.4 运算符与表达式增量和减量运算符都是单目运算符,运算结果是增量和减量运算符都是单目运算符,运算结果是将操作数增将操作数增11或减或减11。这两个运算符都有前置和后。这两个运算符都有前置和后置两种形式。前置形式是指运算符在操作数的前置两种形式。前置形式是指运算符在操作数的前面,后置是指运算符在操作数的后面。例如面,后置是指运算符在操作数的后
38、面。例如:a+;/a+;/等价于等价于a=a+1;a=a+1;+a;/+a;/等价于等价于a=a+1;a=a+1;a-;/a-;/等价于等价于a=a-1;a=a-1;-a/-a/等价于等价于a=a-1;a=a-1;2.4 运算符与表达式 注意:注意:(1 1)C#C#语言算术表达式的乘号(语言算术表达式的乘号(*)不能省略。例如:)不能省略。例如:数学式 数学式b2-4ac b2-4ac 相应的 相应的C+C+表达式应该写成:表达式应该写成:b*b-4*a*c b*b-4*a*c。(2 2)C#C#语言表达式中只能出现字符集允许的字符。例如:语言表达式中只能出现字符集允许的字符。例如:数学 数
39、学r2 r2 相应的 相应的C+C+表达式应该写成:表达式应该写成:PI*r*r PI*r*r。(其中。(其中PI PI 是 是已经定义的符号常量)。已经定义的符号常量)。(3 3)C#C#语言算术表达式只使用圆括号改变运算的优先顺 语言算术表达式只使用圆括号改变运算的优先顺序(不要指望用 序(不要指望用 或 或)。可以使用多层圆括号,此时)。可以使用多层圆括号,此时左右括号必须配对,运算时从内层括号开始,由内向外依 左右括号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。次计算表达式的值。2.4 运算符与表达式 2 赋值运算符赋值运算符包括基本赋值运算符()和复合赋赋值运算符包括
40、基本赋值运算符()和复合赋值运算符,复合赋值运算符包括:值运算符,复合赋值运算符包括:=、*=*=、/=/=、=、+=+=、-=-=、=和和&=&=。例如例如:int a=12,x=3,y;int a=12,x=3,y;a+=a;/a+=a;/表示表示 a=(a+a)=(12+12)=24;a=(a+a)=(12+12)=24;y*=x+2;/y*=x+2;/表示表示 y=y*(x+2);y=y*(x+2);而不是而不是y=y*x+2;y=y*x+2;注意:赋值运算符、复合赋值运算符的优先级比注意:赋值运算符、复合赋值运算符的优先级比算术运算符低。算术运算符低。2.4 运算符与表达式 3 比较
41、运算符(11)比较数值。有六种比较运算符可以用于比较)比较数值。有六种比较运算符可以用于比较数值,包括:数值,包括:=(相等)、(相等)、!=!=(不等于)、(不等于)、(小于)、(小于)、=(大于)、(大于)、=(大于或等于)。(大于或等于)。(22)isis运算符运算符isis运算符可以检查对象是否与特定的类型兼容。运算符可以检查对象是否与特定的类型兼容。例如,要检查变量是否与例如,要检查变量是否与objectobject类型兼容。类型兼容。2.4 运算符与表达式(3)as 运算符 as as 运算符用于执行引用类型的显式类型转换。如果要转换 运算符用于执行引用类型的显式类型转换。如果要转
42、换的类型与指定的类型兼容,转换就会成功进行;如果类型 的类型与指定的类型兼容,转换就会成功进行;如果类型不兼容,不兼容,as as 运算符就会返回值 运算符就会返回值null null。如下面的代码所示,。如下面的代码所示,如果 如果object object 引用不指向 引用不指向string string 实例,把 实例,把object object 引用转换为 引用转换为string string 就会返回 就会返回null null:object o1=Some String;object o1=Some String;object o2=5;object o2=5;string s1
43、=o1 as string;/s1=Some String string s1=o1 as string;/s1=Some String string s2=o2 as string;/s1=null string s2=o2 as string;/s1=null as as 运算符允许在一步中进行安全的类型转换,不需要先使 运算符允许在一步中进行安全的类型转换,不需要先使用 用is is 运算符测试类型,再执行转换。运算符测试类型,再执行转换。2.4 运算符与表达式44字符串连接运算符字符串连接运算符对于两个字符串类型的变量,可以使用对于两个字符串类型的变量,可以使用“+”“+”运算运算符实
44、现字符串的连接。例如:符实现字符串的连接。例如:string strTemp1,strTemp2;string strTemp1,strTemp2;strTemp1=Hello;strTemp1=Hello;strTemp2=World.;strTemp2=World.;MessageBox.Show(strTemp1+strTemp2);MessageBox.Show(strTemp1+strTemp2);当定义了两个字符串型变量当定义了两个字符串型变量strTemp1strTemp1和和strTemp2strTemp2并给它们分别赋值之后,就可以使用第并给它们分别赋值之后,就可以使用第44
45、行的行的“+”“+”运算符把它们连接起来,并在中间夹了一个运算符把它们连接起来,并在中间夹了一个空格,形成空格,形成Hello World.Hello World.字符串。字符串。2.4 运算符与表达式 5 逻辑运算符 C#C#中常用的逻辑运算符有:!中常用的逻辑运算符有:!(非 非)、&(&(与 与)、|(|(或 或)。计。计算的结果仍然是布尔类型的 算的结果仍然是布尔类型的true true 或 或false false。与:与:C#C#中的符号为 中的符号为“&”“&”,表示必须满足两个条件。语法,表示必须满足两个条件。语法为 为“表达式 表达式1&1&表达式 表达式2”2”。或:或:C
46、#C#中的符号为 中的符号为“|”“|”,表示满足两个条件中的任意一,表示满足两个条件中的任意一个即可。语法为 个即可。语法为“表达式 表达式1|1|表达式 表达式2”2”。2.4 运算符与表达式 6 typeof 运算符 typeof 运算符用于获得系统原型对象的类型,也就是Type 对象。常与is 运算符连用,用于判断某个变量是否为某一类型。每一个类都有一个GetType 方法与它功能很相似。【例2-2】创建控制台程序,演示typeof 运算符。2.4 运算符与表达式 7 new 运算符newnew运算符用于创建一个新的类型实例,它有运算符用于创建一个新的类型实例,它有33种种形式:形式:
47、(11)对象创建表达式,用于创建一个类类型或值)对象创建表达式,用于创建一个类类型或值类型的实例。类型的实例。(22)数组创建表达式,用于创建一个数组类型实)数组创建表达式,用于创建一个数组类型实例。例。(33)委托创建表达式,用于创建一个新的委托类)委托创建表达式,用于创建一个新的委托类型实例。型实例。2.4 运算符与表达式2.4.2 2.4.2 运算符优先级运算符优先级 在一个表达式中出现多种运算时,将按照预先确定的顺序 在一个表达式中出现多种运算时,将按照预先确定的顺序计算并解析各个部分,这个顺序称为运算符优先级。计算并解析各个部分,这个顺序称为运算符优先级。C#C#中常用的运算符的优先
48、级见表 中常用的运算符的优先级见表2-7 2-7 所示。所示。2.4 运算符与表达式 2.4.3 表达式 表达式是一个或多个运算的组合。表达式是一个或多个运算的组合。C#C#的表达式与其他语言 的表达式与其他语言的表达式没有显著的区别。每个符合 的表达式没有显著的区别。每个符合C#C#规则的表达式的 规则的表达式的计算都是一个确定的值。对于常量、变量的运算和对于函 计算都是一个确定的值。对于常量、变量的运算和对于函数的调用都可以构成最简单的表达式。数的调用都可以构成最简单的表达式。通常表达式涉及的内容包括赋值计算以及真 通常表达式涉及的内容包括赋值计算以及真/假判断等。假判断等。一个赋值表达式
49、至少应有一个变量,以及一个赋给变量的 一个赋值表达式至少应有一个变量,以及一个赋给变量的值。这里要求所有的变量在使用前都必须初始化,否则 值。这里要求所有的变量在使用前都必须初始化,否则C#C#编译器将对未初始化的变量给出警告 编译器将对未初始化的变量给出警告。2.5 控制台应用程序与格式化输出 2.5.1 控制台输出 Console.WriteLine Console.WriteLine()方法将指定的数据(后跟换行符)()方法将指定的数据(后跟换行符)写入标准输出流(屏幕)。写入标准输出流(屏幕)。Console.WriteLine Console.WriteLine()方法类似于()方法
50、类似于C C 语言的 语言的printf printf 函数,可 函数,可以采用 以采用“N,M:“N,M:格式化字符串 格式化字符串”的形式来格式化输 的形式来格式化输出项,其中的参数含义如下。出项,其中的参数含义如下。花括号 花括号:用来在输出中插入变量的值。:用来在输出中插入变量的值。N N:表示输出变量的序号,变量的序号从:表示输出变量的序号,变量的序号从0 0 开始。开始。2.5 控制台应用程序与格式化输出表表2-8 2-8 格式化字符串中字母含义格式化字符串中字母含义字母 字母 含义 含义C C 或 或c c Currency Currency 货币 货币 格式 格式D D 或 或