• 804.00 KB
  • 2022-04-29 14:31:24 发布

C#课件PPT课程资料教学作者二第2章 语言基础.ppt

  • 58页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'VisualC#.NET程序设计教程第2章语言基础华南农业大学信息(软件)学院2011.2 第2章C#语言基础本章要点:VisualC#.NET数据类型概述VisualC#.NET简单数据类型的使用VisualC#.NET的常量和变量VisualC#.NET的运算符与表达式VisualC#.NET的常用方法VisualC#.NET的常用语句VisualC#2008.NET的新特性 2.1数据类型与表达式2.1.1VisualC#.NET的标识符定义标识符时,必须符合以下命名规则:标识符必须是由字母、数字、下划线组成的一串符号,且必须以字母或下划线开头。由于标识符代表对象的名称,所以用户在选取标识符时应选取有意义的字符序列,以便在程序中能从标识符看出所标识的对象,从而便于阅读和记忆。用户定义的标识符不能与C#语言的关键字同名。 2.1.2C#.NET的数据类型简介 2.1.3简单数据类型1.整数数据类型类型名数据类型符占用字节数数值的范围有符号字节型sbyte1-128~+127字节型byte10~+255短整型short2-32768~+32767整型int4-231~231-1长整数long8-263~263-1无符号长整数ulong8264-1 2.1.3简单数据类型C#的字符类型有以下特点:(1)每个字符占2个字节(Unicode字符集)。(2)C#中的字符型与整型之间不能再像C/C++中自动转换。以下语句在C#中不合法:charc=13;正确的写法:charc=(char)13;2.字符数据类型 3.布尔类型布尔类型(bool)只含有两个数值:true和false。注意:不同于C语言中的非零为真的概念.4.实数类型实数类型又称浮点型,C#中的浮点型包含单精度浮点型(float)和双精度浮点型(double)两种。单精度型:取值范围为-之间,精度为7位数。双精度型:取值范围为-之间,精度可达15到16位。2.1.3简单数据类型 使用实数类型,需注意以下几个问题:(1)存在正0和负0。(2)存在正无穷大和负无穷大,一般产生在除数为0的情况下,例如,1.2/0.0的结果是正无空大,-1.2/0.0的结果为负无空大。(3)存在非数字值(Not-a-Number,简称NaN)。当出现0.0/0.0这种非法运算的时候就会出现非数字值。(4)对于浮点运算,如果运算结果的绝对值在精度范围内小到一定程度,系统就会当做0值处理(+0或-0)。(5)实型常量默认为double类型。floata=3.14;floata=3.14f;2.1.3简单数据类型 5.小数类型又称十进制类型,其类型说明符为decimal,主要用于金融领域,又称金融类型,其表示的值的范围大约是到,比float类型小,但是其精确度却可以达到28到29位。在十进制类型的数据的后面加上“m”,表示该数据是小数类型,如0.1m、123.9m等。2.1.3简单数据类型 6.其他说明2.1.3简单数据类型数据类型用途占用字节数DateTime日期时间类型8string字母数字数据:字母、数字和其他字符可变object任何数据类型4booltrue或false1 2.1.4常量与变量1.常量C#中常量的数据类型有多种:sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string等。符号常量声明的格式如下:[常量修饰符]const类型说明符常量名=常量表达式; 例如:publicconstintA=1,B=3;classConstExample{publicconstintA=1;publicconstintB=A+2;}注意:常量是静态的,能够在类中访问。2.1.4常量与变量 【例2-1】分析下列程序的执行结果。[程序代码]classConstExample{publicconstintA=1;publicconstintB=(A+2)*(A+3);}classConstTest{publicstaticvoidMain()System.Console.WriteLine("A={0},B={1}",ConstExample.A,ConstExample.B);}}输出结果:A=1,B=12 2.变量(1)变量的含义及其定义变量是指在程序运行过程中其值可以发生变化的量。定义变量的格式:[变量修饰符]类型说明符变量名1=初值1,变量名2=初值2,…;例如:privatestaticintgz=65;publicdoublejs=76.8;2.1.4常量与变量 (2)静态变量和实例变量声明变量时,使用static关键字声明的变量为静态变量。静态变量只需创建一次,在后面的程序中就可以多次引用。静态变量的初始值就是该变量类型的默认值。实例变量是指在声明变量时没有使用static变量说明符的变量,也称普通变量。实例对象在指定的对象中被声明并分配空间,如果实例变量所在的对象被撤消了,该变量也就从内存中被清除了。2.1.4常量与变量 (3)局部变量局部变量是临时变量,它只是在定义它的块内起作用,所谓块是指大括号“{”和“}”之间的所有内容。局部变量从被声明的位置开始起作用,当块结束时,局部变量也会随着消失。使用局部变量需注意初始化问题,局部变量需要人工赋值后才能使用2.1.4常量与变量 【例2-3】分析下列程序的运行结果。usingSystem;publicclassLocalTest{publicstaticvoidLocalExample(){inti=210,k;//定义局部变量i和kk=i*2;//给局部变量k赋值Console.WriteLine("i={0},k={1}",i,k);//输出i和k的值}publicstaticvoidMain(){LocalExample();//调用函数Console.WriteLine("i={0},k={0}",i,k);//此语句将产生错误}}2.1.4常量与变量 [运行结果]2.1.4常量与变量 2.1.5运算符与表达式1.运算符与表达式概述运算符和表达式的概念运算对象和运算符的“目”运算符的优先级和结合性 2.算术运算符与算术表达式(1)基本算术运算符2.1.5运算符与表达式 (2)增1(++)减1(--)运算符2.1.5运算符与表达式 3.关系运算符与关系表达式2.1.5运算符与表达式 4.逻辑运算符与逻辑表达式2.1.5运算符与表达式 5.位运算符位运算符用来对操作数进行位运算,其运算对象是整型和字符型。(1)位逻辑运算符①位与运算符(&)②位或运算符(|)③异或运算符(^)④取反运算符(~)(2)位移位运算符①左移运算符(<<)②右移运算符(>>)2.1.5运算符与表达式 6.赋值运算符与赋值表达式优先级:在C#语言中,所有的赋值和自反赋值运算符的优先级都是一样的,比所有的其它运算符的优先级都低,是优先级最低的运算符。结合性:赋值和自反赋值运算符的结合性是自右向左。2.1.5运算符与表达式 2.1.5运算符与表达式 7.条件运算符与条件表达式条件运算符是C#语言中的唯一的一个三目运算符,其一般形式如下:表达式1?表达式2:表达式3优先级:仅优于赋值运算符。结合性:自右向左。例如:x=5;y=8;m=x>y?x:y;2.1.5运算符与表达式 8.其它运算符2.1.5运算符与表达式 9.运算符的优先级2.1.5运算符与表达式 2.1.6常用方法方法功能示例Abs(x)求x的绝对值Abs(15.3)=15.3、Abs(0)=0、Abs(-5.3)=5.3Ceiling(x)求不小于x的最小整数Ceiling(7.3)=8.0、Ceiling(-9.6)=-9.0Cos(x)求x的余弦值(x为弧度)Cos(0.0)=1.0Exp(x)求指数Exp(1.0)=2.718281828Floor(x)求不大于x的最小整数Floor(7.8)=7、Floor(-9.2)=-10Log(x)求以e为底的自然对数Log(2.718281828)=1.0Max(x,y)求x和y的最大值Max(5.6,8.3)=8.3Min(x,y)求x和y的最小值Min(5.6,8.3)=5.6Pow(x,y)求x的y次幂Pow(3.0,3.0)=27.0、Pow(4.0,0.5)=2.0Sin(x)求x的正弦值(x为弧度)Sin(0.0)=0.0、Sin(3.1415929/2)=1.0Sqrt(x)求x的算术平方根Sqrt(9.0)=3.0Tan(x)求x的正切值(x为弧度)Tan(0.0)=0.0、Tan(3.1415926/4)=1.0 调用以上数学方法的一般形式:System.Math.方法名([参数])在Math类中定义了两个重要的常数:Math.PI(圆周率3.14159265358979323846)Math.E(自然对数—2.71828182845904523)2.1.6常用方法 2.1.7随机数[格式1]:randomObj.Next()//0-int32.MaxValue[格式2]:randomObj.Next(N)//0--N-1例如:RandomrandomObj=newRandom()i=randomObj.Next(10);作用:产生一个0-9之间的随机整数并赋值给变量I。[格式3]:randomObj.Next(N,M)//n—M-1例如:RandomrandomObj=newRandom()i=randomObj.Next(5,10);作用:产生一个5-9之间的随机整数并赋值给变量i。举例 2.1.8关于数组int[]a=newint[10];intAL=6;inta[]=newint[AL];//动态指定int[]x={1,2,3,4};int[]x=newint[]{1,2,3,4};int[,]a=newint[3,4];int[,]b={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int[][]b=newint[3][];//各行的个数可以不同 2.1.9方法的定义1,方法的定义[格式]:方法修饰符数据类型说明符方法名([形式参数说明列表])/*定义方法头*/{变量、数组的定义语句;其它可执行部分}方法修饰符:public,private,internal,protected,abstract,sealed 2.1.9方法的参数2,参数的传递所谓参数传递是指实参把数据传给形参的方式,C#中的参数传递方式:值传递、引用传递、输出参数(out)、参数数组(params)。privatevoidbutton1_click(objectsender,System.EventArgse)//值传递publicvoidexch(refinta,refintb)//引用传递,调用时也要加ref关键字 2.1.10关于字符串1.字符串类System.String2.字符串的种类及其定义(1)规则字符串[格式]:string字符串变量名[=字符串初值];(2)逐字字符串逐字字符串由@字符后跟双引号括起来的零个或多个字符组成。[格式]:string字符串变量名[=@字符串初值];注意:string与System.String的关系 转义字符含义转义字符含义"单引号(")nLF(换行)"双引号(")rCR(回车)\反斜杠本身()tHT(横向跳格,相当于Tab键)空字符u表示后面跟八进制数a警示符U同ub退格x表示后面跟十六进制数fFF(换页键)vVT(纵向跳格)规则字符串中可以使用的转义字符举例2.1.10关于字符串 2.1.11其他数据类型1.结构类型,struct2.枚举类型,enum3.委托类型,delegate4.装箱与拆箱,boxingandunboxing值类型与引用类型的互换 2.2C#常用语句语句与表达式一般语句与复合语句注释语句注释方法:///**/ 2.2.1if语句1.单条件if语句其语法格式为:if(条件表达式)〈语句块1〉else语句块2;2.if语句的嵌套格式:if(条件1)[〈语句块1〉]elseif(条件2)[〈语句块2〉]…else[〈其他语句块〉] 其语法格式为:switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;…case常量表达式n:语句n;break;[default:语句n+1;break;]}2.2.2switch语句 2.2.3for语句使用方法同C;其语法格式为:for(表达式1;表达式2;表达式)语句;for(inti=1;i<100;i++)s+=1;break和continue语句使用方法同C举例 2.2.4while语句使用方法同C;其语法格式为:while(表达式)语句;inti=1;while(i<100){s+=i;i++;} 2.2.5do语句其语法格式为:do语句;while(表达式)inti=1,s=0;do{s+=i;i++;}while(i<100) 2.2.6foreach语句与for语句类似,都是重复执行指定的一组语句。但foreach语句专门用于数组或对象集合中的每个元素。其语法格式为:foreach(数据类型符变量名in数组或集合){循环体}举例 2.2.7其他语句try语句,异常保护语句Try[〈try语句块〉][Catch[〈catch语句块〉]][Finally[〈finally语句块〉]] 2.32008的新特性泛型(Generics)可空类型(Nullable)分部类(PartialClasses)反射(Reflection)序列化与反序列化(Serializable) 2.3.1泛型-1.背景栈的定义publicclassStack{object[]m_items;publicvoidPush(objectitem){…}publicobjectPop(){…}} 2.3.1泛型-2.定义泛型栈的定义PublicclassStack{T[]m_items;publicvoidPush(Titem){…}publicTPop(){…}}栈的使用Stackstack=newStack();stack.Push(1);Intnumber=stack.Pop(); 2.3.1泛型-3.优点特征:内部算法和数据操作保持不变,而实际数据类型可以在使用时指定.优点:支持任何类型(包括自定义类型)减少代码冗余类型安全性能提高(值类型提高200%,引用类型提高100%) 2.3.2可空类型-1可空类型是System.Nullable结构类型的实例;可空类型可以表示其基础值类型正常范围内的值,再加上一个null值;举例:int?num=null;->Nullablenum=null;bool?b=null;DateTime?d=null;int?x=null;inty=x??-1; 2.3.2可空类型-2System.Nullable结构:publicboolHasValue{get;}获取一个值,指示当前的确对象是否有值;publicTValue{get;}获取当前的确System.Nullable值;publicTGetValueOrDefault()检索当前System.Nullable对象的值,或该对象的默认值; 2.3.3分部类-定义类的定义publicclassStack{object[]m_items;publicvoidPush(objectitem){…}publicobjectPop(){…}}分部类的定义partialclassStack{object[]m_items;publicvoidPush(objectitem){…}}partialclassStack{publicobjectPop(){…}} 2.3.3分部类-说明应用范围:大型项目开发;WindowsForm/WebForm等规定:所有部分都必须使用partial关键字;各个部分必须具有相同的可访问性;各个部分可以指定不同的基接口,最终类型实现所有分部声明所列出的全部接口;… 2.3.4反射(Reflection)反射的用途是在程序或装配件中查找有关类型的信息,或者从装配件中读取元数据。反射包含的大多数类都在System.Reflection命名空间中。常用的类:1.Type类:查找有关类型的相关信息。获取指向给定类型的Type对象有2种常用方式:(1)Typet=typeof(double);(2)Typet=Type.GetType("System.Double")。2.Assembly类:在System.Reflection命名空间中定义,它允许程序员访问给定装配件的元数据。 序列化的目的:1、以某种存储形式使自定义对象持久化;2、将对象从一个地方传递到另一个地方。实质上序列化机制是将类的值转化为一个一般(连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上。序列化,获取对象并将其状态信息转换为可存储或可传输形式的过程。反序列化,将对象还原回序列化之前的内容。二进制序列化:可以保持类型不变,即可以在应用程序的不同调用之间保留对象的状态。XML和SOAP序列化:仅序列化公共属性和字段,不保存类型。2.3.5序列化-定义 2.3.5序列化-示例1、如何序列化一个类:在类的上方加上Serializable特性即可。[Serializable]publicclassMyClass{…}2、二进制序列化MyClassuser=newMyClass();……IFormatterformater=newBinaryFormatter();Streamstream=newFileStream("UserInfo.bin",FileMode.Create,FileAccess.Write,FileShare.None);formater.Serialize(stream,user);stream.Close();3、二进制反序列化IFormatterformatter=newBinaryFormatter();Streamstream=newFileStream("UserInfo.bin",FileMode.Open,FileAccess.Read,FileShare.Read);MyClassc=(MyClass)formatter.Deserialize(stream);stream.Close(); 本章结束语言要点:1.数据类型2.基本语句3.方法或函数'