C#面向对象程序设计.ppt

上传人:max****ui 文档编号:3399091 上传时间:2019-12-13 格式:PPT 页数:49 大小:1.47MB
返回 下载 相关 举报
C#面向对象程序设计.ppt_第1页
第1页 / 共49页
C#面向对象程序设计.ppt_第2页
第2页 / 共49页
C#面向对象程序设计.ppt_第3页
第3页 / 共49页
点击查看更多>>
资源描述
书名:C#面向对象程序设计ISBN:978-7-111-30056-4作者:王晶晶出版社:机械工业出版社本书配有电子课件,C#面向对象程序设计高职高专ppt课件,第2章数据类型、运算符与表达式,数据类型类型转换运算符和表达式,C#面向对象程序设计高职高专ppt课件,2.1数据类型,C#语言支持以下数据类型:,数据类型,值类型,引用类型,结构类型,简单类型,枚举类型,整数类型,浮点类型,小数类型,字符类型,布尔类型,类类型,数组类型,接口类型,值类型用来存储实际值,而引用类型则用来存储对实际数据的引用。,C#面向对象程序设计高职高专ppt课件,2.1.1值类型,值类型包含简单类型、枚举类型和结构类型。类型是同类型数据的抽象,不同的类型在C#中用不同的类型标识符来表示。如表2-1。,表2-1值类型,C#面向对象程序设计高职高专ppt课件,1.简单类型从计算机的表示角度来看,简单类型又可分为整数类型、浮点类型、小数类型、布尔类型和字符类型。所有的简单类型(C#语言的组成部分)均为.NETFramework系统类型的别名。例如,int是System.Int32的别名。,C#面向对象程序设计高职高专ppt课件,整数类型,C#中提供了8种整数类型,它们的取值范围及类型标识符见表2-2所示。,表2-2整数类型表,C#面向对象程序设计高职高专ppt课件,C#提供了两种数据类型来表示小数:单精度浮点型(float)和双精度浮点型(double)。两者的划分依据是取值范围和精度的不同,见表2-3。,浮点类型,表2-3浮点类型表,C#面向对象程序设计高职高专ppt课件,小数类型,为了满足财务和金融计算领域方面高精度的要求,C#提供了小数类型(decimal)这种高精度的数据类型,避免浮点类型计算造成的误差。小数类型数据的后面必须加m或M后缀来表示它是小数类型的,如3.14m。否则会被解释成标准的浮点类型的数据。表2-4列出了小数类型的取值范围及精度。,表2-4小数类型表,C#面向对象程序设计高职高专ppt课件,字符类型,C#提供的字符类型按照国际上公认的标准,采用Unicode字符集。它可以表示世界上大部分语言种类。所有Unicode字符的集合构成字符类型。字符类型的描述见表2-5。,表2-5字符类型表,C#面向对象程序设计高职高专ppt课件,给一个字符类型的变量赋值:charname=a;char类型的变量值必须用单引号括起来。单引号内的字符数量必须且只能是一个,并且不能是单引号或者反斜杠。为了表示单引号和反斜杠等特殊的字符,C#提供了转义符,如表2-6所示。,C#面向对象程序设计高职高专ppt课件,表2-6转义字符,布尔类型,布尔类型表示现实中的“真”或“假”这两个概念,主要用来进行逻辑判断。在C#中,分别采用true和false这两个值来表示“真”和“假”,如表2-7所示。,表2-7布尔类型,2.枚举类型,假设要在程序中表示一年中的季节,可以使用整数0、1、2和3来分别表示春季、夏季、秋季和冬季,这虽然可行,但并不直观。为此,C#中提供了一个更好的方案,使用枚举类型可以将一年中的四季分别用Spring、Summer、Autumn和Winter这些直观的符号来表示,便于阅读和理解。枚举类型是用户自定义的数据类型,是一种允许用符号代表数据的值类型。当程序中某个变量具有一组确定的值,通过“枚举”可以将其值一一列举出来。,比如,声明一个代表季节的枚举类型Season,可以这样声明:enumSeasonSpring,Summer,Autumn,Winter;enum关键字用于声明枚举。Season是枚举名,花括号“”和“”括起来的部分是枚举成员表,枚举成员之间用逗号分隔,任何两个枚举成员不能具有相同的名称。这里声明了一个Season枚举类型,它包含Spring,Summer,Autumn,Winter4个枚举成员。,声明好了一个枚举类型之后,我们就可以像使用简单类型一样来声明枚举类型的变量了,格式为:枚举类型名变量名;以前面定义的Season枚举类型为例,要声明该类型的变量,可以这样:enumSeasonSpring,Summer,Autumn,Winter;Seasonseason1,season2,season3,season4;season1=Season.Spring;season2=Season.Summer;season3=Season.Autumn;season4=Season.Winter;这样,season1,season2,season3,season4这4个变量的取值分别为Spring,Summer,Autumn和Winter。每种枚举类型都有基础类型,枚举元素的默认基础类型为int。在Season枚举中,Spring为0,Summer为1,Autumn为2,依此类推。默认情况下,C#规定第1个枚举成员的值取0,其它成员按顺序依次增1。在编程时,可以根据需要为枚举成员赋值。,几种为枚举成员赋值的情况。,(1)为第1个枚举成员赋值enumSeasonSpring=1,Summer,Autumn,Winter;在此枚举中,强制元素序列从1而不是0开始。(2)为某一个枚举成员赋值enumSeasonSpring,Summer,Autumn=6,Winter;从第一个枚举成员Spring到被赋值的枚举成员Autumn前的那个枚举成员Summer是按默认方式取值的,即Spring为0,Summer为1。被赋值的枚举成员Autumn取赋给它的值6,它后面的枚举成员则在此基础上依次增1,即Winter为7。(3)为多个枚举成员赋值enumSeasonSpring,Summer=4,Autumn=6,Winter;被赋值的枚举成员取所赋给它的值,其后的枚举成员的值依次加1,在第一个被赋值的枚举成员Summer之前的枚举成员,按默认方式取值。故Spring取值为0,Summer取值为4,Autumn取值为6,Winter取值为7。,枚举成员的值在不经过显示转换前,是不会变换成整数值的。,例2-1枚举类型的应用usingSystem;publicclassEnumTestenumWeekDaySat=1,Sun,Mon,Tue,Wed,Thu,Fri;staticvoidMain()intx=(int)WeekDay.Sun;inty=(int)WeekDay.Fri;Console.WriteLine(Sun=0,x);Console.WriteLine(Fri=0,y);,输出结果为:Sun=2Fri=7在这个例子中,我们通过“枚举名.枚举成员”的方式来访问枚举成员,如代码中的WeekDay.Sun。,3.结构类型,利用前面介绍过的数据类型进行运算似乎已经足够了。但是,我们会经常碰到一些更为复杂的情况。比如,同学录的记录中包含姓名、性别、家庭住址等信息。如果将姓名、性别、家庭住址分别定义为互相独立的简单类型,则难以反映它们之间的内在联系,这些项都与某一学生相联系。那么,有没有好的解决方法呢?C#中提供了一种称为结构类型的数据类型用来有组织地把这些不同类型的数据信息存放到一起。结构类型是用户自定义的数据类型。使用结构类型可以方便地存储多条不同类型的数据,极大地方便了编程人员对大量信息的管理。C#中的结构类型类似于C语言中的结构体。,结构类型采用struct来声明,格式如下:struct结构名/结构成员定义说明:1.struct是一个关键字,表明声明的是一个结构体;2.结构名的命名需符合C#标识符的命名规范:以字母或者下划线开头,其后可以跟任意个字母、数字或者下划线。3.花括号中的内容称为结构体,定义结构中所包含的所有成员。每个成员的声明都采用如下形式:访问修饰符数据类型成员名;,声明同学录的记录结构,structstudentpublicstringname;publicstringsex;publicstringaddress;其中,public是访问修饰符,用来修饰数据成员的可访问性。关于访问修饰符的介绍我们会在类一章中做详细介绍。,声明了一个结构体类型,就可以定义该类型的变量了,格式如下:结构类型名变量名;如:studentstudent1;通过结构变量加上访问符“.”号,再跟成员的名称,可以访问结构的成员,格式为:结构变量名.成员名;如:student1.name=“王刚”;可以把结构类型作为另一个结构的成员,形成结构的嵌套。例如,“同学录”这个结构中又包括了“地址”这个结构,“地址”结构类型包括城市、街道和门牌号码3个成员。,请看以下示例:structStudentpublicstringname;publicstringsex;publicstringaddresspublicstringcity;publicstringstreet;publicuintno;Studentstudent1;,2.1.2引用类型,引用类型是和值类型并列的类型,值类型比较简单,对于那些结构比较复杂、抽象能力比较强的数据,就需要使用引用类型来定义。C#中引用类型有4种:类类型、数组类型、接口类型和委托类型。关于它们的详细介绍,我们会在后续章节中进行。,2.2类型转换,在现实生活中,经常需要在不同的数据类型之间进行转换。比如,举行一次演讲比赛,获奖的比例是6%,如果参加演讲比赛的总人数是170个人,那么获奖的人数就是1706%=10.2个人。在这种情况下,就不得不舍去0.2,把10.2这个的浮点数变成一个整数10来对待。这就是现实生活中的数据类型转换的例子。在C#语言中,数据类型的转换可以分为两类:隐式类型转换和显式类型转换。,2.2.1隐式类型转换,隐式类型转换是系统默认的、不需要加以声明就可以进行的转换。在隐式类型转换过程中,编译器无需对转换进行详细检查就能够安全地执行转换。比如,从int类型转换到long类型就是一种隐式类型转换。表2-8列出了在C#中可以进行的各种隐式数值转换。,表2-8隐式转换表,例2-2隐式类型转换(将字符类型隐式转换为整型)usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConvertDataclassProgramstaticvoidMain(stringargs)charc=a;Console.WriteLine(c=0,c);intQ=c;Console.WriteLine(Q=0,Q);,程序运行结果如图2-1所示。,图2-1程序运行结果,例2-3隐式类型转换(将整型隐式转换为字符类型)usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConvertDataclassProgramstaticvoidMain(stringargs)inta=97;Console.WriteLine(a=0,a);charc=a;Console.WriteLine(c=0,c);,程序运行结果如图2-2所示。,图2-2错误列表,这个程序在编译时出现了错误,我们从错误列表中可知int类型是不能隐式转换成char类型的,但是在上个程序中,char类型是可以隐式转换为int类型的,这个问题请注意。,2.2.2显式类型转换,显式类型转换又叫做强制类型转换。与隐式类型转换相反,显式转换需要用户明确的指定转换类型。格式如下:(类型标识符)表达式将表达式的值的类型转换为类型标识符的类型。如(int)3.14表示的是把double类型的3.14转换成int类型。除了使用这种方式进行显式转换外,还可以使用Convert命令进行显式转换。表2-9列出了使用这种方式可以进行的显式转换。,表2-9Convert命令进行的显示转换,表2-10显式转换表,例2-4将整型转换成字符类型usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConvertDataclassProgramstaticvoidMain(stringargs)inta=97;Console.WriteLine(a=0,a);charc=Convert.ToChar(a);Console.WriteLine(c=0,c);编译、运行程序,结果如图2-1所示。,2.3运算符和表达式,运算符是表示各种不同运算的符号。当执行加法、减法、乘法和除法运算时分别需要使用、*和/符号,这些符号(、*和/)称为运算符。表达式是用运算符将运算对象连接起来的运算式,是程序语言中最基本的对数据进行加工和处理的过程。注意,单个常数或变量也是表达式。,2.3.1运算符的类型,C#提供了非常丰富的运算符,大致可以分为以下几类:算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符、条件运算符和其他运算符等。,算术运算符,算术运算符用于对操作数进行算术运算,C#的算术运算符见表2-11。,表2-11算术运算符,关系运算符,关系运算符用于比较两个值的大小,返回一个布尔值。C#的关系运算符见表2-12。,表2-12关系运算符,逻辑运算符,逻辑运算符用于表示两个布尔值之间的逻辑关系,逻辑运算结果是布尔型。C#的逻辑运算符见表2-13。,表2-13逻辑运算符,位运算符,位运算符对运算对象进行位的运算,是指进行二进制位的运算。C#的位运算符见表2-14。,表2-14位运算符,赋值运算符,赋值运算符用于将一个数据赋予一个变量。赋值运算符的左操作数必须是一个变量,而不能是常量,也不能是表达式。C#的赋值运算符为“=”。在赋值运算符的基础上加上其他运算符,就构成了复合赋值运算符。C#的复合赋值运算符见表2-15。,表2-15复合赋值运算符,其他运算符,(1)字符串连接符(+)。用于连接两个字符串。(2)is运算符。用于检查表达式是否是指定的数据类型,如果是,结果为true,否则结果为false。若intk=2,则表达式kisint的值为true。(3)sizeof运算符。sizeof运算符获取值类型数据在内存中占用的字节数。它的用法如下:sizeof(类型标识符)。例如表达式sizeof(int)的值为4。(4)new运算符。new运算符用于创建类的实例,我们在后面类章节中详细介绍。(5)typeof运算符。typeof运算符用于获取一个对象的类型。(6)checked和unchecked运算符。用于控制整数算术运算中的溢出情况。,在求表达式的值时,要按照运算符的优先级别进行运算,表2-16给出了C#中运算符的优先级,优先级的顺序自上而下由高到低。,表2-16运算符的优先级,2.3.2表达式,表达式是由运算符、变量和常量等组成的符号序列。一般来说,可以将表达式分为算术表达式、赋值表达式、关系表达式、逻辑表达式以及条件表达式等五种类型。若表达式中包含多个运算符,则该表达式的类型是通过在表达式中执行的最后一次运算的运算符的类型进行划分的。通过对下面代码的运行结果的分析,来总结C#中表达式的运算规则。,例2-5表达式的运用1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Text;4namespaceConsoleApplication156classProgram7staticvoidMain(stringargs)89Console.WriteLine(5+7.5=0,5+7.5);10Console.WriteLine(7/4=0,sizeof(int)*10/6.0=1,7/4,sizeof(int)*10/6.0);11intx=5;12Console.WriteLine(+x=0,x=1,+x,x);13inty=5;14Console.WriteLine(y+=0,y=1,y+,y);15if(y!=0)16Console.WriteLine(53?5:2=0,53?5:2);17Console.WriteLine(!(62)|(58)181920,程序的运行结果如图2-3所示。,图2-3运行结果,说明:,1.在算术表达式中,当操作数的类型不同时,C#编译器将先使用类型转换规则,从而确保操作以可预测的方式执行。比如第9行代码,先把第一个操作数5转换成float类型5.0,然后再求和,得到的结果为float类型12.5。2.C#中运算符的结合性为:二元运算符(除赋值运算符外)都是左结合,即运算按照从左到右的顺序执行;赋值运算符和条件运算符是右结合,即运算按照从右到左的顺序执行。例如,x=y=z按照x=(y=z)进行求值。3.对包含多种运算符的表达式进行求值时,如果有括号,先计算括号里面的表达式,然后按运算符的优先级别和结合性确定计算的先后顺序。先执行优先级别高的运算符,然后执行优先级别低的运算符。比如第10行代码,求表达式sizeof(int)*10/6.0时,sizeof算符的优先级别最高,所以先计算sizeof(int),然后执行乘、除运算。同一优先级别的运算符,运算次序由结合方向决定。例如第10行代码中乘、除运算符具有相同的优先级,其结合方向为从左至右,所以先乘后除。4.C#中,根据运算符所使用的操作数个数的不同,将运算符分为:一元运算符:只有1个操作数。一元运算符有:!,+,-,(T)x。二元运算符:有2个操作数,使用时在操作数之间插入运算符。三元运算符:有3个操作数。三元运算符只有一个,即(?:)。,5.自增(+)和自减(-)运算符是一元运算符,其作用是使操作数的值自动增1或减1。注意其操作数只能是变量,不能是常量和表达式。这两个运算符既可以用前缀形式,也可以用后缀形式。这两种形式之间的区别非常细微,却又非常重要。当使用前缀形式时,先将操作数的值增1或减1,然后再使用表达式的结果。如第12行代码中的表达式+x,先执行x=x+1,然后再使用x的值(x=6)作为表达式的值。如果使用后缀形式,先会使用表达式的结果,然后再将操作数的值进行增1或是减1。如第14行代码中的表达式y+,先使用y的值(y=5)作为表达式的值,然后再执行y=y+1(此时y=6)。6.C#不支持从整型到布尔类型的转换。例如,在C或C+中出现如下语句是完全合法的:inty=5;if(y)这是因为在C或C+中支持从整型到布尔类型的转换,自动将非零整数y转换成布尔值True,但是C#中要求将编程意图表达得更清楚,必须使用运用运算符!=来判断整数y是否等于0,如第15行代码。7.逻辑运算符的优先级别由高到低分别是:逻辑非、逻辑与、逻辑或。如第17行代码中逻辑表达式等价于!true|false&false,按照逻辑运算符的优先级别进行运算,结果为false。8.C#中的标识符,是以字母或者下划线开头,其后可以跟任意个字母、数字或者下划线,如btnOK_Click,_student是合法的标识符。选择标识符时,应注意做到“见名知意”,以增加程序的可读性。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!