1、2.1.2 值类型值类型?值类型(值类型(value type)?值类型的变量在堆栈(在堆栈(Stack)中直接包含其数据)中直接包含其数据,每个变量都有自己的数据副本(除 ref 和 out 参数变量外)变量之间的操作独立(互不影响)。简单类型(simple type)枚举类型(enum type)结构类型(struct type)null 的类型(nullable type)?C#的值类型分为的值类型分为:?2.1.2 值类型?值类型(v a l u e t y p e)?值值类型值类型 类别 简单类型简单类型 2.1数据类型数据类型 说明 有符号整型:有符号整型:sbyte、short、
2、int 和和 long 无无符符 号号整整型型:byte、ushort、uint 和和 ulong Unicode 字符型:字符型:char 2.1.1类型系统类型系统?通用类型系统(通用类型系统(Common Type System,CTS)定义)定义高精度小数型:高精度小数型:decimal 了如何在运行库中声明、使用和管理类型。了如何在运行库中声明、使用和管理类型。布尔型:布尔型:bool IEEE 浮点型:浮点型:float 和和 double 以保证遵循公共语言规范(Common Language 枚举类型枚举类型 enum E.形式的用户定义的类型形式的用户定义的类型 Specif
3、ication,CLS)的语言(C#、VB.NET)编写程序结构类型结构类型 struct S.形式的用户定义的类型形式的用户定义的类型 之间的互操作。可以为可以为 null 的类型的类型 其他所有具有其他所有具有 null 值的值类型的扩展值的值类型的扩展?CTS是运行库(CLR)支持跨语言集成的一个重要组成引用类型引用类型 类类型类类型 其他所有类型的最终基类:其他所有类型的最终基类:object 部分。Unicode 字符串型:字符串型:string class C.形式的用户定义的类型形式的用户定义的类型 接口类型接口类型 数组类型数组类型 委托类型委托类型 interface I.形
4、式的用户定义的类型形式的用户定义的类型 一维和多维数组,例如一维和多维数组,例如 int 和和 int,delegate int D(.)形式的用户定义的类型形式的用户定义的类型 值类型 类别 简单类型 2.1 数据类型 说明 有符号整型:s2.1.3 引用类型引用类型?引用类型(引用类型(reference type):):?引用类型的变量在堆栈(在堆栈(Stack)中存储对数据(对象)中存储对数据(对象)的引用(地址),数据(对象)存储在托管运行环境的引用(地址),数据(对象)存储在托管运行环境管理的堆(管理的堆(Heap)中。)中。对于引用类型,两个变量可能引用同一个对象,因此对一个变量
5、的操作可能影响另一个变量所引用的对象 类类型(class type)、接口类型(interface type)、数组类型(array type)和委托类型(delegate type)?C#的引用类型分为:的引用类型分为:?2.1.3 引用类型?引用类型(r e f e r e n c e t y p【例【例2.1】值类型与引用类型之间的区别示例】值类型与引用类型之间的区别示例?变量变量val1、val2为值类型;为值类型;ref1、ref2为引用类型。比较其运行结果和内存为引用类型。比较其运行结果和内存分配示意图分配示意图 堆栈(堆栈(Stack)托管堆(托管堆(Heap)int val1=
6、0;val1=0int val2=val1;val2=0Class1Class1 ref1=new Class1();Value=0ref1Class1 ref2=ref1;ref2堆栈(堆栈(Stack)托管堆(托管堆(Heap)val1=0val2=123;val2=123Class1Value=123ref1Ref2.Value=123;ref2【例2.1】值类型与引用类型之间的区别示例?变量v a l 1、2.2 变量变量 变量是程序运行过程中用于存放数据的变量是程序运行过程中用于存放数据的 存储单元存储单元。变量的值在程序的运行过程中可以改变。变量的值在程序的运行过程中可以改变。2.
7、2.1 声明变量(变量的定义)声明变量(变量的定义);在定义变量时,首先必须给每一个变量起名,称为变量名,在定义变量时,首先必须给每一个变量起名,称为变量名,变量名代表变量名代表存储地址存储地址。变量的类型决定了存储在变量中的数值的类型。变量的类型决定了存储在变量中的数值的类型。变量定义格式:变量定义格式:类型标识符类型标识符 变量名变量名1,变量名,变量名2,2.2 变量 变量是程序运行过程中用于存放数据的存储单元。2.2.1 声明变量(变量的定义)声明变量(变量的定义)例:例:double fsum;string strName;char b;int x,y,z;注意:注意:C#规定,任何
8、变量在使用前,必须先定义,规定,任何变量在使用前,必须先定义,后使用。后使用。2.2.1 声明变量(变量的定义)例:d o u b l e f2.2.2 变量的命名规则变量的命名规则?变量名的第一个字符必须是字母、下划线(变量名的第一个字符必须是字母、下划线(“_”)或或,其后的字符可以是字母、下划线或数字。其后的字符可以是字母、下划线或数字。注意,注意,C#定义的关键字不能用作变量名。但可以定定义的关键字不能用作变量名。但可以定义义加关键字的变量名加关键字的变量名?myVar、_strName、obj1、namespace为正确的变量名 99var、ItsOK、namespace为错误的变量
9、名?.NET Framework一般遵循两种命名约定:一般遵循两种命名约定:PascalCase和和camelCase 2.2.2 变量的命名规则?变量名的第一个字符必须是字2.2.3 变量的分类变量的分类 C#中,变量分为七种类型:中,变量分为七种类型:?静态变量(静态变量(static variables)?非静态变量(也即实例变量非静态变量(也即实例变量instance variables)?局部变量(局部变量(local variables)?数组元素(数组元素(array elements)?值参数(值参数(value parameters)?引用参数(引用参数(reference
10、parameters)?输出参数(输出参数(output parameters)【例【例2.2】变量的声明和赋值示例】变量的声明和赋值示例?2.2.3 变量的分类 C#中,变量分为七种类型:?静态变2.2.4 变量的作用域变量的作用域?1.局部变量的作用域局部变量的作用域?局部变量存在于表示声明该变量的块语句或方法结束的封闭花括号之前的作用域内 在for、while或类似语句中声明的局部变量存在于该循环体内 同名的局部变量不能在同一作用域内声明两次?2.局部变量的作用域冲突局部变量的作用域冲突?3.字段和局部变量的作用域冲突字段和局部变量的作用域冲突?在类的方法中可以定义与已定义的字段名相同的
11、局部变量,而不产生冲突?【例【例2.3】变量的作用域示例(】变量的作用域示例(2-3newVariable.cs)2.2.4 变量的作用域?1.局部变量的作用域?局部2.3 常量常量 在在C#中,常量在程序的运行过程中其值是中,常量在程序的运行过程中其值是不能改变不能改变的,例如,数字的,例如,数字100就是一个常量,这样的常量一般就是一个常量,这样的常量一般被称作常数。被称作常数。?声明常量的格式:声明常量的格式:const 类型标识符类型标识符 常量名常量名=表达式;表达式;?例:例:const double PI=3.14159265;double r=5.2;double s=PI*r
12、*r;Console.Write(“面积面积=0”,s);?2.3 常量 在C#中,常量在程序的运行过程中其值是不能改变常量特点:常量特点:?在程序中,常量只能被赋予初始值。?定义常量时,表达式中的运算符对象只允许出现常量和常数,不能有变量存在。?常量的命名规则一般采用大写字母 例如:例如:int b=18;const int a=26;const int k=b+10;/错误,表达式中不允许出现变量错误,表达式中不允许出现变量 const int d=a+23;/正确,因为正确,因为a是常量是常量 a=56;/错误,不能修改常量的值错误,不能修改常量的值 【例【例2.4】常量的声明和赋值示例
13、】常量的声明和赋值示例?常量特点:?在程序中,常量只能被赋予初始值。?定义常量时单元练习单元练习 判断题:判断题:1.C#规定所有变量必须先声明后使用。规定所有变量必须先声明后使用。()2双精度浮点数类型双精度浮点数类型double由由8个字节组成。个字节组成。()3.执行执行const int a=10;a=a+1;这两条语句后这两条语句后,a的值为的值为11。()填空题:填空题:1使用变量使用变量a存放数据存放数据-389,则将变量声明为(,则将变量声明为()类型)类型最合适。最合适。单元练习 判断题:1.C#规定所有变量必须先声明后2.4.1 整型整型?C#支持支持8个预定义整数类型,分
14、别支持个预定义整数类型,分别支持 8位、位、16位、位、32位和位和64位位整数值的有符号和无符号的形式整数值的有符号和无符号的形式 名称名称 CTSCTS类型类型 说明说明 范围范围 sbyte sbyte System.SByte System.SByte 8 8位有符号整数位有符号整数 128128到到127 127 short short System.Int16 System.Int16 1616位有符号整数位有符号整数 32 76832 768到到32 767 32 767 int int System.Int32 System.Int32 3232位有符号整数位有符号整数 2 2
15、 147 147 483 483 648648 到到 2 2 147 147 483 483 647 647 long long System.Int64 System.Int64 6464位有符号整数位有符号整数 9 9 223 223 372 372 036 036 854 854 775 775 808808 到到9 223 372 036 854 775 807 9 223 372 036 854 775 807 byte byte System.Byte System.Byte 8 8位无符号整数位无符号整数 0 0到到255 255 ushort ushort System.Uin
16、t16 System.Uint16 1616位无符号整数位无符号整数 0 0到到65535 65535 uint uint System.Uint32 System.Uint32 3232位无符号整数位无符号整数 0 0到到4 294 967 295 4 294 967 295 ulong ulong System.Uint64 System.Uint64 6464位无符号整数位无符号整数 0 0 到到 18 18 446 446 744 744 073 073 709 709 551 551 615 615 【例【例2.5】整型变量示例】整型变量示例 2.4.1 整型?C#支持8 个预定义整
17、数类型,分别支持82.4.2 浮点类型浮点类型 C#支持支持2种浮点数据类型(种浮点数据类型(float和和double),用于包),用于包含小数的计算含小数的计算 名称 CTS类型 说明 位数 范围(大致)-45-45到到float float System.Single System.Single 3232位单精度浮点数位单精度浮点数 7 7 1.51.51010 3.43.410103838 double double System.Double System.Double 6464位双精度浮点数位双精度浮点数 15/16 15/16 5.05.01010-324-324到到308308
18、 1.71.71010?【例【例2.6】浮点类型变量示例】浮点类型变量示例?2.4.2 浮点类型 C#支持2 种浮点数据类型(f l o a t 和2.4.3 decimal类型类型 C#支持高精度小数类型(支持高精度小数类型(decimal),),decimal数据类型一般用数据类型一般用于财务计算,即可以用较大的精确度来表示货币值。于财务计算,即可以用较大的精确度来表示货币值。名称名称 CTSCTS类型类型 说明说明 位数位数 范围范围(大致大致)decimal decimal System.Decimal System.Decimal 128128位位高高精精度度十十 28/29 28/
19、29 1.01.01010-28-28到到 进制数表示法进制数表示法 7.97.910102828?注意注意:小数类型数据的后面必须跟小数类型数据的后面必须跟 m或者或者M后缀来表示它是后缀来表示它是decimal类型的,如类型的,如3.14m、0.28m等,否则就会被解释成标准的等,否则就会被解释成标准的浮点类型数据,导致数据类型不匹配。浮点类型数据,导致数据类型不匹配。?【例【例2.7】decimal类型变量示例类型变量示例?2.4.3 d e c i ma l 类型 C#支持高精度小数类型(d e常量后缀表示方法常量后缀表示方法?138f 代表代表float类型的数值类型的数值138.0
20、 518u 代表代表uint类型的数值类型的数值518 36897123ul 代表代表ulong类型的数值类型的数值 36897123 22.1m 代表代表decimal类型的数值类型的数值22.1 12.68 代表代表double类型的数值类型的数值12.68 36 代表代表int类型的数值类型的数值36 特例:前缀特例:前缀 0 x开头表示开头表示16进制进制 常量后缀表示方法?1 3 8 f 2.4.4 bool类型类型 C#的的bool数据类型用于逻辑运算,包含数据类型用于逻辑运算,包含 bool值值true或或false 名称名称CTSCTS类型类型 说明说明 值值 布尔类型布尔类型
21、 bool bool System.Boolean System.Boolean true true或或false false?例:例:?bool b=53;/b 的值为的值为true;?b=false;?【例【例2.8】布尔类型变量示例】布尔类型变量示例?2.4.4 b o o l 类型 C#的b o o l 数据类型用于逻辑运算2.4.5字符类型字符类型 C#的的char数据类型用于保存单个字符的值,如:数据类型用于保存单个字符的值,如:你你、A、?、6、2 CTSCTS类型类型 说明说明 值值 名称名称 字符类型字符类型 表示一个表示一个1616位的(位的(UnicodeUnicode)
22、字)字 char char System.Char System.Char 符符?C#语言中,四种形式:语言中,四种形式:?字符使用单引号括起来(例如字符使用单引号括起来(例如A)使用使用4位位16进制的进制的Unicode值(例如值(例如A)带有数据类型转换的整数值(例如带有数据类型转换的整数值(例如(char)65)16进制数(进制数(x0041)?【例2.9】字符类型变量示例 2.4.5 字符类型 C#的c h a r 数据类型用于保存单个字符的2.4.5字符类型字符类型?为了表示单引号和反斜杠等特殊的字符常数,为了表示单引号和反斜杠等特殊的字符常数,C#提供了转义符。特殊符提供了转义符
23、。特殊符号则需要使用转义序列表示。号则需要使用转义序列表示。C#常用的转义符常用的转义符 转义符转义符 0 a b f n r t v 字符名称字符名称 单引号单引号 双引号双引号 反斜杠反斜杠 空字符(空字符(Null)发出一个警告发出一个警告 倒退一个字符倒退一个字符 换页换页 新的一行新的一行 换行并移到同一行的最前面换行并移到同一行的最前面 水平方向的水平方向的Tab 垂直方向的垂直方向的Tab 2.4.5 字符类型?为了表示单引号和反斜杠等特殊的字符常数2.4.6 object类型类型?object类型是类型是C#编程语言的类层次结构的根类型,编程语言的类层次结构的根类型,objec
24、t是是System.Object的别名,所有的类型都隐含地最终派生于的别名,所有的类型都隐含地最终派生于System.Object类。类。名称名称 object object CTSCTS类类 System.Object System.Object 说明说明 根类型,根类型,CTSCTS中的其他类型都是从它派生而来中的其他类型都是从它派生而来的(包括值类型)的(包括值类型)?object类型主要可以用于两个目的:类型主要可以用于两个目的:?可以使用可以使用object引用绑定任何类型的对象引用绑定任何类型的对象 object类型执行许多基本的一般用途的方法,包括类型执行许多基本的一般用途的方法
25、,包括Equals()、GetHashCode()、GetType()和和ToString()等等 2.4.6 o b j e c t 类型?o b j e c t 类型是C#编程语2.4.6 object类型类型 对于任一个对于任一个object变量,均可以赋以任何类型的值。变量,均可以赋以任何类型的值。double d=3.14;object obj1;obj1=d;obj1=k;?对于对于object类型的变量,声明必须使用类型的变量,声明必须使用object关键字。关键字。?2.4.6 o b j e c t 类型 对于任一个o b j e c t 变量,均TestObject实验实验
26、 using System;namespace Test public class TestObj static void Main()object x=25;,x,x.GetHashCode(),x.GetType(),x.ToString();Console.ReadKey();?T e s t O b j e c t 实验 u s i n g S y s t e m;n a m2.4.7 string类型类型?C#字符串处理使用字符串处理使用 string(System.String的别名)类型表示零或更的别名)类型表示零或更多多Unicode字符组成的序列字符组成的序列 string是
27、引用类型是引用类型?一个字符串是被双引号包含的一系列字符。一个字符串是被双引号包含的一系列字符。string类是专门用于对字符串进行操作的。类是专门用于对字符串进行操作的。如:如:string str1=中国,;中国,;string str2=你好!;你好!;string str3=str1+str2;/这相当于这相当于str3=中国,你好!中国,你好!char c=str30;/取出取出str3的第一个字符,即的第一个字符,即“中中”字。字。2.4.7 s t r i n g 类型?C#字符串处理使用s t r i nTestString实验实验 using System;运行结果:运行结果
28、:namespace test d,人人,4,3 public class TestCls static void Main()string str1=abdc;string str2=中国人中国人;,str12,str22,str1.Length,str2.Length);T e s t S t r i n g 实验 u s i n g S y s t e m;运行结2.4.7 string类型类型?C#支持两种形式的字符串支持两种形式的字符串?正则字符串(regular string)?包含在双引号中的零个或多个字符组成(如hello),并且可以包含简单转义序列可以包含简单转义序列(如表示
29、制表符的t)、十六进制转义序列和Unicode转义序列?原义字符串(verbatim string)?由由字符后跟开始字符后跟开始的双引号字符、零个或多个字符以及结束的双引号字符组成。一个简单的示例就是“hello“(不解释转义字符不解释转义字符)?【例【例2.10】字符串类型变量示例】字符串类型变量示例 2.4.7 s t r i n g 类型?C#支持两种形式的字符串?正则字符串(正则字符串(regular string)例例1:“this is a test”“C#程序设计教程程序设计教程”?例例2:1.using System;2.class StrDemo 3.4.static vo
30、id Main()5.6.Console.WriteLine(First0linenSecond0line);7.Console.WriteLine(你好你好a);8.Console.WriteLine(“1t2t3);9.Console.WriteLine(“*t*t*”);10.11.?正则字符串(r e g u l a r s t r i n g)例1:正则字符串(正则字符串(regular string)?1.2.3.4.5.6.7.8.9.10.例例3:using System;运行结果如下:运行结果如下:class StringDemo public static void Mai
31、n()string str1=“A string”;string str2=Another string.;Console.WriteLine(“0n1”,str1,str2);正则字符串(r e g u l a r s t r i n g)?1.2.3.4原义字符串(原义字符串(verbatim string)?逐字字符串常数以逐字字符串常数以 开头,后跟一对双引号,在双引号中放入开头,后跟一对双引号,在双引号中放入字符。如:字符。如:“电子高专电子高专”“This is a book.”?逐字字符串常数同常规字符串常数的区别逐字字符串常数同常规字符串常数的区别:在逐字字符串常数的双引号中,
32、每个字符都代表其最原始的意在逐字字符串常数的双引号中,每个字符都代表其最原始的意义,在逐字字符串常数中没有转义字符。义,在逐字字符串常数中没有转义字符。注意注意:如果要包含双引号(),就必须在一行中使用两个双如果要包含双引号(),就必须在一行中使用两个双引号()。引号()。?原义字符串(v e r b a t i m s t r i n g)?逐字字符串常原义字符串(原义字符串(verbatim string)1.2.3.4.5.string str1;/定义字符串类型定义字符串类型 string str2=hello,world;/规则字符串常数:规则字符串常数:hello,world st
33、ring str3=hello,world;/逐字字符串常数:逐字字符串常数:hello,world string str4=hello t world;/hello world string str5=hello t world;/hello t world 6.7.string str6=“He said Hello to you;/Tom said Hello to you string str7=“He said Hello to you;/Tom said Hello to you 原义字符串(v e r b a t i m s t r i n g)1.2.3.4原义字符串(原义字符
34、串(verbatim string)?1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.例(运行见例(运行见TestStrA.cs)运行结果如下:运行结果如下:using System;class Test static void Main()Console.WriteLine(This is a verba tim string literal that spans several lines.);Console.WriteLine(Here is some tabbed output:1 2 3 4 5 6 7 8 );Console.WriteLine(Progra
35、mmers say,I like C#);原义字符串(v e r b a t i m s t r i n g)?1.2.3.2.4.8 可以为可以为null的类型的类型?可以为可以为null的类型表示可被赋值为的类型表示可被赋值为 null值的值类型变量值的值类型变量?其取值范围为其基础值类型正常范围内的值,再加上一个null值。例如,bool?(Nullable)的值包括true、false或null?可以为可以为null的类型的声明语法:的类型的声明语法:?T?x;或或Nullable x;其中的T为值类型。语法T?是Nullable的简写。?可以为可以为null的类型赋值的方法与为一般值
36、类型赋值的方法相同。的类型赋值的方法与为一般值类型赋值的方法相同。例如:例如:int?x=10;?【例【例2.11】可以为】可以为null的类型示例的类型示例 2.4.8 可以为n u l l 的类型?可以为n u l l 的类型表示2.5 类型转换类型转换?数据类型在一定条件下是可以相互转换的。数据类型在一定条件下是可以相互转换的。C#允许使用两种转允许使用两种转换的方式:换的方式:隐式转换和显式转换隐式转换和显式转换。隐式转换隐式转换?只允许发生在从小的值范围的类型到大的值范围的类型的转换,转换后的数值大小不受影响。隐式转换是系统默认的、不需要加以声明就可以进行的转换。?隐式数据转换的使用
37、方法如下:隐式数据转换的使用方法如下:int i=518;/a 为整型数据为整型数据 long b=i;/b 为长整型数据为长整型数据 float f=i;/f 为单精度浮点型数据为单精度浮点型数据 2.5 类型转换?数据类型在一定条件下是可以相互转换的。2.5.1 隐式转换隐式转换 转换源转换源 sbyte byte short ushort int uint long ulong char float 转换目标转换目标 short、int、long、float、double 或或decimal short、ushort、int、uint、long、ulong、float、double或或d
38、ecimal int、long、float、double或或decimal int、uint、long、ulong、float、double或或decimal long、float、double或或decimal long、ulong、float、double或或decimal float、double或或decimal float、double或或decimal ushort、int、uint、long、ulong、float、double或或decimal double 2.5.1 隐式转换 转换源 s b y t e b y t e s h o r2.5.2 显式转换(强制转换)显式转换
39、(强制转换)?显式转换又叫显式转换又叫强制类型转换强制类型转换,显式转换要明确指定转换类型。,显式转换要明确指定转换类型。显式转换格式:显式转换格式:意义为:意义为:将表达式的值的类型转换为类型标识符的类型将表达式的值的类型转换为类型标识符的类型。(类型标识符类型标识符)表达式表达式?比如:比如:(char)65 /把把int类型的类型的65转换成转换成char类型类型?注意:注意:(1)显式转换可能会导致错误。)显式转换可能会导致错误。(2)对于将)对于将float,double,decimal转换为整数,将通过舍转换为整数,将通过舍 入得到最接近的整型值,如果这个整型值超出目标入得到最接近
40、的整型值,如果这个整型值超出目标 域,则出现转换异常。域,则出现转换异常。比如:比如:(int)6.58m /转换的结果为转换的结果为6 (int)3e25f /将产生溢出错误将产生溢出错误3*1025 2.5.2 显式转换(强制转换)?显式转换又叫强制类型转2.5.3 装箱和拆箱装箱和拆箱?C#中所有的类型都继承于中所有的类型都继承于 System.Object 根类型,而所有的值根类型,而所有的值类型都继承于类型都继承于System.ValueType 类型类型 通过装箱(通过装箱(boxing)和拆箱()和拆箱(unboxing)机制,可以实现值类)机制,可以实现值类型和引用类型之间的转
41、换型和引用类型之间的转换 1.装箱转换装箱转换?装箱转换装箱转换是指将一个值类型的数据是指将一个值类型的数据隐式地隐式地转换成一个对象类型转换成一个对象类型(object)的数据。)的数据。例如:下面的两条语句就执行了装箱转换:例如:下面的两条语句就执行了装箱转换:int i=518;object obj=i;2.5.3 装箱和拆箱?C#中所有的类型都继承于S y s t1.装箱转换装箱转换 例:在程序中执行装箱转换。例:在程序中执行装箱转换。obj=200 k=300 using System;class BoxingDemo static void Main()Console.WriteL
42、ine(执行装箱转换:执行装箱转换:);int k=200;object obj=k;k=300;Console.WriteLine(obj=0,obj);Console.WriteLine(k=0,k);1.装箱转换 例:在程序中执行装箱转换。2.拆箱转换拆箱转换 2拆箱转换拆箱转换 和装箱相反,和装箱相反,拆箱转换拆箱转换是指将一个对象类型的数是指将一个对象类型的数据据显式地显式地转换成一个值类型数据。转换成一个值类型数据。例如:例如:object obj=228;int k=(int)obj;?【例2.12】装箱(】装箱(boxing)和拆箱()和拆箱(unboxing)示例)示例 2.
43、拆箱转换 2 拆箱转换 和装箱相反,2.拆箱转换拆箱转换 例:在程序中使用拆箱转换。例:在程序中使用拆箱转换。using System class UnboxingDemo static void Main()int k=228;object obj=k;/装箱转换装箱转换 int j=(int)obj;/拆箱转换拆箱转换 Console.WriteLine(k=0tobj=1tj=2,k,obj,j);该程序执行后,输出结果如下该程序执行后,输出结果如下:k=228 obj=228 j=228 2.拆箱转换 例:在程序中使用拆箱转换。u s i n g2.5.4 Convert类提供的类型转
44、换方法类提供的类型转换方法 using System;/【例【例2.13】类型转换示例】类型转换示例 namespace Chapter02 class ConversionTest static void Main()sbyte sbyte1=123;/隐式类型转换:隐式类型转换:int 到到 sbyte short short1=123;/隐式类型转换:隐式类型转换:int 到到 short ushort ushort1=123;/隐式类型转换:隐式类型转换:int 到到 ushort,sbyte1,short1,ushort1);/int itest=234L;/不能隐式转换不能隐式转换
45、 long 到到int double dNumber=23.55;int iNumber=System.Convert.ToInt32(dNumber);/Returns 24四舍五入四舍五入 int iNumint=(int)dNumber;/向下取整向下取整 返回返回 23 bool bNumber=System.Convert.ToBoolean(dNumber);/Returns True string strNumber=System.Convert.ToString(dNumber);/Returns 23.55 char chrNumber=System.Convert.ToCh
46、ar(strNumber1);/Returns 3,iNumber,iNumint,bNumber,strNumber,chrNumber);Console.ReadKey();2.5.4 C o n v e r t 类提供的类型转换方法 u s i n g 2.6 输入输入/输出操作输出操作?控制台(控制台(console)输入)输入/输出主要通过命名空间输出主要通过命名空间System中的类中的类Console来实现,它提供了从控制台读来实现,它提供了从控制台读 写字符的基本功能。控制台输入主要通过写字符的基本功能。控制台输入主要通过Console类类的的Read方法方法ReadLine方
47、法来实现的,控制台输出主方法来实现的,控制台输出主要通过要通过Console类的类的Write和和WriteLine方法来实现的。方法来实现的。2.6 输入/输出操作 2.6.1 Console.WriteLine()方法方法?WriteLine()方法的作用是将信息输出到控制台,方法的作用是将信息输出到控制台,但是但是WriteLine方法在输出信息的后面添加一个回车方法在输出信息的后面添加一个回车换行符用来产生一个新行。换行符用来产生一个新行。?在在WriteLine()方法中,可以采用方法中,可以采用“N,M:格式格式化字符串化字符串”的形式来格式化输出字符串,其中的参的形式来格式化输出
48、字符串,其中的参数含义如下:数含义如下:2.6.1 C o n s o l e.Wr i t e L i n e()方?花括号(花括号(“”)用来在输出字符串中插入变量。)用来在输出字符串中插入变量。N表示输出变量的序号,从表示输出变量的序号,从0开始,如当开始,如当N为为0时,则对应时,则对应输出第输出第1个变量的值,当个变量的值,当N为为5时,则对应输出第时,则对应输出第6个变量个变量的值,依次类推。的值,依次类推。,M:格式化字符串格式化字符串是可选项,其中是可选项,其中M表示输出的变量表示输出的变量所所占的字符个数占的字符个数,当这个变量的值为负数时,输出的变量按当这个变量的值为负数时
49、,输出的变量按照左对齐方式排列照左对齐方式排列;如果这个变量的值为正数的时候,输如果这个变量的值为正数的时候,输出的变量按照右对齐方式排列出的变量按照右对齐方式排列。?:格式化字符串格式化字符串也是可选项,因为在向控制台输出时,常也是可选项,因为在向控制台输出时,常常需要指定输出字符串的格式。通过使用标准数字格式字常需要指定输出字符串的格式。通过使用标准数字格式字符串,可以使用符串,可以使用Xn的形式来指定结果字符串的格式,其的形式来指定结果字符串的格式,其中中X指定数字的格式,指定数字的格式,n指定数字的精度,即有效数字的指定数字的精度,即有效数字的位位 数。这里提供数。这里提供8个常用的格
50、式字符。个常用的格式字符。?花括号(“”)用来在输出字符串中插入变量。N 表示输1.货币格式货币格式 货币格式货币格式C或者或者c的作用是将数据转换成货币格式,的作用是将数据转换成货币格式,在格式字符在格式字符C或者或者c后面的数字表示转换后的货币格式数后面的数字表示转换后的货币格式数据的小数位数。据的小数位数。例如:例如:double k=1234.789;Console.WriteLine(0,8:c,k);Console.WriteLine(0,9:c,k);Console.WriteLine(0,10:cok,k);Console.WriteLine(0,-10:cok,k);Cons