收藏 分销(赏)

电子教案-《C#程序设计》-蔡立军.ppt

上传人:w****g 文档编号:12545215 上传时间:2025-10-28 格式:PPT 页数:206 大小:1.87MB 下载积分:25 金币
下载 相关 举报
电子教案-《C#程序设计》-蔡立军.ppt_第1页
第1页 / 共206页
电子教案-《C#程序设计》-蔡立军.ppt_第2页
第2页 / 共206页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,1,C#,程 序 设 计,2,第,1,章,C#,程序设计概述,1.1 .NET,和,C#,简介,1.2,编写一个简单的,C#,程序,1.3,编辑、编译和运行一个,C#,程序,3,1.1.1,什么是,.NET,Microsoft.NET,是微软开发的平台,是一种面向网络、支持各种用户终端的开发平台环境。,Visual Studio.NET,是,Microsoft,为实现其,.NET,技术而开发的一整套工具组件。它把开发功能强大、性能可靠的企业网络解决方案进行了简化。,利用,Visual Studio.NET,,用户可以非常轻松地创建具有自动伸缩能力的可靠的应用程序和组件。,4,1.1.2 .NET,框架,.NET,框架包括以下组件:,1,公共语言运行环境(,CLR,),2,.NET,框架类库(,BCL,),3,数据库访问组件(,ADO.NET,和,XML,),4,基于,ASP.NET,编程框架的网络服务(,Web Services,)和网络表单(,Web Forms,),5,Windows,桌面应用界面编程组件(,WinForms,),5,1.1.3 C#,语言简介,C#,从,C,和,C+,派生而来,但却是完全重新开发的。微软公司借用了,C,和,C+,中一些已有的东西,并加入了新特性。这些特性使该语言更容易使用,其中的许多特性与,Java,极其类似。此外,它还结合了,Delphi,和,Visual Basic,的很多优秀特性。,1,简单,2,面向对象,3,强大灵活,4,类型安全,5,版本可控,6,兼容,返回目录,6,例,1-1,:一个简单的欢迎程序。,/,声明命名空间,using System;,/,程序开始类,class Welcome,/Main,方法,public static void Main(),/,向控制台输出,Console.WriteLine(Welcome to C#!);,7,1.2.1,注释,注释常被用来提供关于程序清单的描述性信息,以使程序具有可读性。注释语句不参与程序的执行。,1,单行注释,格式为:,/,注释内容,用两个斜杠表示注释的开始,直到该行的结尾注释结束。,8,2,多行注释,格式为:,/*,注释内容第,1,行,注释内容第,n,行,*/,从“,/*”,开始到“,*/”,结束的内容均为注释内容,注释内容可以跨越多行。,注意:多行注释不能嵌套。,9,3,文档注释,文档注释使用,3,个斜杠“,/”,符号。,这种注释可帮助用户创建自定义外部文档代码。,C#,利用文档注释,使用,XML,的标记来获得程序代码的,XML,文档,即可把对一个程序的注释转换为一个文档保存,所以文档注释又称为,XML,注释。,10,1.2.2,命名空间的声明,实际中的,C#,程序通常包含多个文件,其中每个文件都可以包含一个或多个命名空间。,命名空间和数据类型一样必须有唯一的名称。在一个,C#,程序中,可以通过一个元素的完整资格名称来识别它,这个资格名称表明出层次关系。,例如,,System.String,是,.NET String,类型完整的资格名称。但是为了简化代码起见,只要声明正在使用,System,命名空间:,using System;,就可以使用一个相对名称如,String,来作为完整名称的同义词,而最后依然代表,System.String,。,11,1.2.3 Main,方法,Main,方法是一个静态方法,它位于一个类或一个结构体中。,声明,Main,方法的方式有三种:,1,返回一个空值,static void Main(),12,2,返回一个整数,static int Main(),return 0;,3,带有参数值,static int Main(string args),return 0;,13,1.2.4,输入和输出,1,输入,Console.Read(),Console.ReadLine(),这两种方法都用于从键盘读取信息,存入某个变量中,所不同的是:,Console.ReadLine(),方法用于将获得的数据保存在字符串变量中,而,Console.Read(),方法用于获得用户输入的任何值(可以是任何的字母或数字)的,ASCII,值。,14,2,输出,Console.Write(),Console.WriteLine(),这两种方法都用于向屏幕输出结果,它们可用于所有的数据类型,所不同的是:,Console.WriteLine(),方法先输出信息后换行,而,Console.Write(),方法不换行输出信息。,返回目录,15,1.3.1,编辑,C#,源代码,操作过程,(,略,),16,1.3.2,编译并运行程序,1,命令行方式,2,菜单方式(编译和运行同步完成),3,菜单方式(编译和运行分步完成),操作过程,(,略,),返回目录,17,第,2,章 数据类型,2.1,值类型,2.2,引用类型,2.3,装箱和拆箱,2.4,类型转换,18,表,2-1 C#,的值类型,19,2.1.1,简单类型,1,整数类型,整数类型的变量的值为整数。,C#,支持八种整数类型:,sbyte,、,byte,、,short,、,ushort,、,int,、,uint,、,long,、,ulong,和,char,。,2,布尔类型,布尔类型表示的逻辑变量只有两种取值:“真”或“假”,在,C#,中,分别采用“,true”,和“,false”,两个值来表示,.,20,3,字符类型,字符包括数字字符、英文字母和表达符号等。,例如:给一个字符变量赋值:,char c=A;,char c=x0032;,char c=u0032;,4.,实数类型,(,1,)浮点类型,单精度(,float,)和双精度(,double,),(,2,)十进制类型,十进制类型(,decimal,)适合应用在不能接受舍入误差的计算中,当定义一个,decimal,变量并赋值给它时,使用,m,下标。,21,2.1.2,结构类型,把一系列相关的变量组织成为一个单一实体的过程,称为生成结构的过程;这个单一实体的类型称为结构类型;每一个变量称为结构的成员。,结构类型的变量采用,struct,来进行声明。,对结构成员的访问通过结构变量名,.,成员名。,22,例,:,定义职工,worker,结构类型:,struct worker,public string name;,public uint age;,public string phone;,public string address;,;,worker p1;,p1.name=“Tom”;,23,2.1.3,枚举类型,定义枚举类型的形式如下:,enum,枚举类型名,数据,1,数据,2,数据,n;,例如,定义一个名为,color,的表示颜色的枚举类型:,enum color,Red,Green,Blue,White,Black,;,color c1 /,定义一个枚举变量,c1;,c1=Green;,24,同样也可以访问枚举成员,其格式为:,枚举名,.,枚举成员名,例如,要访问,color,中的,Blue,元素,其代码为:,color.Blue,返回目录,25,C#,中的引用类型有四种:类、数组、代表和接口。,特殊数值,null,是所有引用类型都适用的,并且表示缺乏实例。,当一个引用不为,null,时,它始终指向一个特定类型的对象,而且该对象已被堆栈分配。,26,2.2.1,类,1,object,类,定义,object,类型引用变量的形式为:,object,标识符,=,数值,;,例如:,object abc1;,object abc2=5.75;,27,2,string,类,定义字符串引用变量的形式为:,string,引用标识符,=”,字符串字面值”,;,例如:,string String1=“hello”;,string String2=“hello”+“world”;,char String4=String10;,bool a=(String1=String2);,28,2.2.2,数组,数组是一种数据结构,包含于数组中的变量,也称为数组的元素,都有相同的类型,而这个类型被称为数组的类型。,可以使用,new,运算符在,C#,中创建数组,数组必须先声明再使用。,在数组声明的时候可以对数组元素进行赋值,或者叫做对数组的初始化,也可以在使用的时候进行动态赋值。,在,C#,中数组可以是一维的,也可以是多维的,同样也支持矩阵和不规则的数组。,29,例,2-1,:创建一个一维,int,类型数组,初始化数组,元素并且把每个元素打印出来。,using System;,class Test,static void Main(),int arr=new int5;,for(int i=0;i arr.Length;i+),arri=i*i;,for(int i=0;i arr.Length;i+),Console.WriteLine(arr0=1,i,arri);,30,一个数组的每一维都有相应的长度,这个长度是一个大于或等于零的整数,,Array,类提供了,Length,成员查询数组的长度。,System.Array,类型是所有数组类型的抽象基类型,系统中存在从任意数组类型到,System.Array,类型的隐式转换。,使用,System.Array,类的属性的语句格式为:,数组名,.,属性名,31,2.2.3,代表,代表(,Delegates,)是一种指向一个静态方法或一个对象的对象实例和对象方法的数据结构。代表实际上相当于,C#,中的函数指针。,定义和使用代表分为三步:声明、实例化和调用。在声明代表时,只需要指定代表指向的原型的类型,它不能有返回值,也不能带有输出类型的参数。,例如:,delegate void MyDelegate();/,声明一个名为,/MyDelegate,的代表,它没有任何参数并且返回,void,值,32,2.2.4,接口,接口定义了一个连接,一个类或者结构必须根据它的连接来实现接口。,接口可以包含一个和多个成员,这些成员可以是方法、属性、索引指示器和事件,但不能是常量、域、操作符、构造函数或析构函数,而且不能包含任何静态成员。,33,例如:,interface IExample,string thisint index get;set;,event EventHandler E;,void F(int value);,string P get;set;,public delegate void EventHandler(object sender,EventArgs e);,返回目录,34,2.3.1,装箱,装箱就是将值类型变量隐式地转换为,object,对象类型变量,或转换为任何该值类型所执行的接口类型。具体过程是:把一个值类型装箱,就是创建一个,object,对象类型的实例,并把该值类型的值复制给该实例。,例如:,int val=1000;,object obj=val;/,装箱,将,val,的值复制给,obj,在装箱后对,val,的任何修改均不会影响到,obj,对象的内容。,35,2.3.2,拆箱,拆箱是装箱的逆过程。具体过程是:先确认,object,类型实例的值是否为给定值类型的装箱值,然后将这个实例的值复制给新的给定值类型的变量。,例如:,int val=1000;,object obj=val;/,装箱,int val1=(int)obj;/,拆箱,当装箱时,不需要显式地进行强制类型转换;当拆箱时,必须显式地进行类型转换。,返回目录,36,2.4.1,隐式类型转换,隐式类型转换是系统默认的、不需要任何声明就可以进行的转换,它是由编译器根据不同类型数据间转换规则自动完成的,又称为自动转换。,例如:,byte a=100;,byte b=a;/,相同类型隐式转换,float c=a;/,不同类型隐式转换,37,隐式转换遵守“由低级类型向高级类型转换,结果为高级类型”的原则,从而保证计算精度。,隐式数值转换,隐式枚举转换,隐式引用转换,38,2.4.2,显式类型转换,显式类型转换就是强制执行从一种数据类型到另一种数据类型的转换,因此也称为强制类型转换,一般用强制类型转换符来实现。,显式类型转换的格式为:,(,类型名,),变量或表达式,例如:,int i,h;,float j=4.5;,i=(int)j;,h=j;,39,与隐式类型转换相比,显式类型转换不一定总成功,有可能会造成数据信息的丢失或产生异常。,显式转换包括所有的隐式转换。,显式数值转换,显式枚举转换,显式引用转换,返回目录,40,第,3,章 常量与变量,3.1,词法说明,3.2,变量,3.3,常量,3.4,运算符和表达式,41,3.1.1,标识符,C#,语言的标识符名称必须遵守以下规则:,所有的标识符只能由字母、数字和下划线这三类字符组成,而且第一个字符必须为字母或下划线;,标识符中不能包含空格、标点符号、运算符等其他符号;,标识符区分大小写;,标识符不能与,C#,关键字名相同。,标识符不能与,C#,中的类库名相同。,42,3.1.2,关键字,关键字(,Keyword,)也称为保留字,它是由系统预先定义好的标识符,在,C#,语言中有特定的含义。,C#,语言的关键字如表,3-1,所示。,在,C#,中,如果在关键字前加上前缀“,”,,则可以使它变为合法的标识符。,43,返回目录,44,变量(,Variable,)是计算机内存中被命名的数据存储单元,其中存储的值是可以改变的。,变量名实际上是一个符号地址,在对程序进行编译时由系统给每个变量分配一个真正的内存地址。,在程序中通过变量取值,实际上就是通过变量名找到相应的内存地址,再从中读取数据或存入数据。,45,3.2.1,变量的命名,符合标识符的命名规则,最好“见名知意”,46,3.2.2,变量的使用,1,定义(声明)变量,变量必须先定义(声明)后使用。,定义变量的一般格式为:,特征,修饰符,数据类型 变量名,1,,变量名,2,,,,变量名,n,;,例如:,int count;/,声明了一个存放整数的变量,count,byte a,b,c;/,声明了三个存放,8,位无符号整数的变量,a,、,b,、,c,47,2,变量的赋值,一般格式为:,变量名,=,表达式;,在程序中,可以给一个变量多次赋值,变量的当前值等于最后一次给该变量所赋的值。,3,变量的初始化,其一般格式为:,特征,修饰符,数据类型 变量名,1=,表达式,1,变量名,n=,表达式,n;,例如:,int count=5;,另有一种定义变量并对其初始化的方法是:使用,new,操作符,调用,C#,值类型的默认构造函数并对变量赋予默认值。,48,4,变量的作用域和生存周期,作用域定义了一个变量的可见性和生存周期。,一个变量的生存周期被限制在它自身的作用域内。,作用域可以嵌套。,在内层作用域定义的变量不能和外层作用域中定义的变量重名。,49,3.2.3,变量的类型,1,静态变量,使用,static,修饰符定义的变量称为静态变量。,对静态变量的访问只能通过类型名,而不能用实例名访问。,静态变量的初始值就是该类型变量的默认值。,静态变量最好在定义时赋值。,例如:,static int a=10;,50,2,实例变量,不使用,static,修饰符定义的变量称为实例变量。,例如:,int a;,类中的实例变量,结构中的实例变量,3,数组元素,数组中每个元素的初始值为该数组元素类型的默认值。,数组元素最好在初始化时被赋值。,51,4,值参数,值参数向方法中传递的是数据的值。,5,引用参数,当一个带有,ref,修饰符的参数被声明时,称为引用参数,;,向它传递的不是值而是对调用变量的引用。,6,输出参数,当一个带有,out,修饰符的参数被声明时,称为输出参数。,它只能用于传递方法返回的数据,而不能向方法内部传递参数。,52,7,局部变量,局部变量被局部变量声明语句创建。,当控制权进入,block,块、,for,循环语句或者,switch,分支语句时,其中的相关局部变量被创建。当控制权离开,block,块、,for,循环语句或者,switch,分支语句时,其中的相关局部变量随即失效。,局部变量不会被自动初始化。,在一个局部变量的有效范围中,在它被声明之前的所有关于它的引用都是错误的。,返回目录,53,常量(,Constant,)是指在程序执行过程中其值不能被改变的量。,定义常量的一般格式为:,特征,修饰符,const,数据类型 常量名,=,表达式;,例如:,const PI=3.14159;,返回目录,54,3.4.1 C#,运算符,单目运算符,:,如,-x,、,x+,、,sizeof,(,x,);,双目运算符,:,如,x+y,、,x%y,;,三目运算符,:,如条件运算符“,?:”,。,55,3.4.2,运算符的优先级和结合性,56,3.4.3,赋值运算符及其表达式,1,一般的赋值运算,赋值表达式的格式如下:,变量,=,表达式;,例如:,int i=10;,2,赋值中的类型转换,如果赋值运算发生在不同的数据类型之间,当它们是兼容的数据类型时,则右边的值自动转换成左边的变量类型。,57,3,复合赋值,复合赋值运算符是双目运算符与赋值运算符的组合,简化了赋值语句的书写,其形式为:,x op=y,例如:,a+=b,a-=b,a*=b,58,3.4.4,算术运算符及其表达式,+,(加法运算符,或正值运算符,如,1+2,,,+3,),-,(减法运算符,或负值运算符,如,1-2,,,-3,),*(乘法运算符,如,1*2,),/,(除法运算符,如,1/2,),%,(模运算符或称求余运算符,如,7%3=1,),59,3.4.5,关系运算符及其表达式,比较运算符:,(小于)、,(大于)、,=,(大于等于),,等式运算符:,=,(等于)、,!=,(不等于),关系运算符用于两个值进行比较,其运算结果为“,true”,(真)或“,false”,(假)。,60,3.4.6,逻辑运算符及其表达式,逻辑表达式的结果是一个布尔值,结果为真则为,true,,结果为假则为,false,。,C#,中的逻辑运算符如下:,&,(逻辑与),|,(逻辑或),!,(逻辑非)。,61,3.4.7,位运算符及其表达式,位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整型或者是可以转换为整型的任何其他类型。,C#,中的位运算符如下:,(按位求反)、,&,(按位与)、,|,(按位或),(按位异或)、,(右移),62,3.4.8,条件运算符及其表达式,条件表达式的一般格式为:,表达式,1?,表达式,2:,表达式,3,例如:,max=(ab)?a:b),在,C#,中第一个操作数必须是一个布尔表达式,或者是可以转换为布尔类型的表达式,否则编译会出现错误。,63,3.4.9,自增、自减运算符,自增(,+,)、自减(,-,)运算符都是单目运算符,其作用是以一种紧凑格式使变量的值自动增,1,或减,1,。,运算符后置用法,代表先使用变量,然后对变量增值,运算符前置用法,代表先对变量增值,再使用变量,64,3.4.10,其他运算符,1,new,运算符,new,操作符用于创建一个新的类型实例。它有三种形式:,(,1,)对象创建表达式,(,2,)数组创建表达式,(,3,)代表创建表达式,例如:,class A;A a=new A;,int int_arr=new int10;,delegate double DFunc(int x);DFunc f=new DFunc(5);,65,2,is,运算符,“,is”,是获取类型信息的运算符,其运算结果是布尔值,true,或,false,。,is,表达式的一般格式为:,变量(表达式),is,数据类型,3,as,运算符,as,运算符也是用来进行相关的数据类型的判断,.,as,表达式的一般格式为:,表达式,1=,表达式,2 as,数据类型,66,4,typeof,运算符,typeof,运算符可以获得指定类型的,System.Type,对象。,typeof,表达式的一般格式为:,typeof,(类型),5,sizeof,运算符,sizeof,运算符用于计算所定义的数值型变量在内存中占多少字节。,sizeof,表达式的一般格式为:,sizeof,(变量类型),这个表达式的结果是一个整数,代表变量所占的字节数。,67,6,checked,和,unchecked,运算符,checked,和,unchecked,运算符用来控制整数类型算术运算和相互转换的溢出检查。,其表达式的一般格式为:,checked,(表达式),unchecked,(表达式),checked,运算符用来强制编译器检查是否溢出的问题,;,unchecked,运算符用来强制编译器不检查这方面的问题。,返回目录,68,第,4,章 控制台输入,/,输出,4.1,控制台,I/O,类,4.2,控制台输入,4.3,控制台输出,4.4,文件操作,69,控制台,I/O,是由,System.Console,类提供给用户访问标准输入、标准输出以及标准错误流,如表,4-1,所示。,返回目录,70,4.2.1 Console.Read(),方法,Read(),方法是一个静态方法,调用的格式为:,Console.Read,Read(),方法每次从标准输入流中读取一个字符,程序将接收的字符作为,int,型值返回给变量。,如果输入流中没有可用字符,则返回,-1,。,71,4.2.2 Console.ReadLine(),方法,ReadLine(),方法也是一个静态方法,调用的格式为:,Console.ReadLine,ReadLine(),方法用于从控制台中一次读取一行字符串,直到遇到,Enter,键才返回读取的字符串。但此字符串中不包含,Enter,键和换行符(,rn,)。,如果没有接收到任何输入,或接收了无效的输入,那么,ReadLine(),方法将返回,null,。,返回目录,72,4.3.1,基本的数据输出,基本数据类型的简单输出形式为:,Console.Write,(“格式串”,参数表);,或,Console.WriteLine,(“格式串”,参数表);,73,4.3.2,格式化输出,1,标准格式化输出,其使用形式为:,Console.WriteLine,(“格式”,对象,1,,,);,其中,格式含静态文本和标志符两部分,标志符表示由参数表所替换的项目以及它的格式化。通用的格式为:,N,,,M,:格式串,74,2,自定义格式化输出,一般形式为:,Console.WriteLine,(“,项目数,,,0,:自定义格式说明符,”,,参数表);,3,日期和时间的格式化输出,(,1,)获取日期和时间,可以通过,DateTime,类获取完整的日期和时间。,(,2,)格式化日期和时间,日期和时间的格式化说明符如表,4-5,所示。,75,4.3.3,字符串的处理方法,1,String,类的字符串方法,(,1,)可以直接输出字符串,也可以使用“,+”,操作符来连接字符串进行输出。,(,2,)可以使用索引值,从一个字符串的某一特定位置提取一个字符。,(,3,)可以调用,string,类的所有属性和方法,调用格式为:,String.,方法名,(),。,76,2,StringBuilder,类的字符串方法,命名空间,System.Text,中的,StringBuilder,类用于创建存储可修改字符串的对象。,3,Parse(),方法,Parse(),方法可以将字符串转换为数值类型数据,而且被转换的字符串可以包含格式化数据,也可以是由数字字符组成的字符串。,调用,Parse(),方法的常用格式为:,public static,数据类型,.Parse(string s);,77,4,Convert,类,Convert,类用于将某个基本数据类型转换为另一个基本数据类型。,调用格式为:,Convert.,方法名(原数据变量);,返回目录,78,4.4.1,创建一个文本文件,可利用,File,类中的,CreateText,方法来创建一个文本文件。,CreateText,方法的参数之一是所要创建文件的路径,它在指定路径创建一个文件,并返回一个,StreamWriter,对象,这个对象可以用来向文件中写入内容。,79,4.4.2,读写文本文件,1,从一个文本文件中读出内容,可利用,File,类中的,OpenText,方法来从一个文本文件中读出内容。它打开指定路径的文件,并返回一个,StreamReader,对象,该对象用来读出文件的内容。,2,将内容写入一个文本文件中,可利用,File,类中的,AppendText,方法来向一个文本文件中写出内容,,AppendText,方法的参数是所要写入内容的文本文件的路径。它打开指定路径的文件,并返回一个,StreamWriter,对象,该对象用来向文件写入内容。,80,4.4.3,删除文件,File,类中有静态方法,Delete,用来删除文件,但它不能删除只读文件,所以在执行删除操作之前要进行判断,将只读文件设置为非只读。删除目录中的所有文件,包括该目录的子目录中的文件,这就需要进行递归调用。,返回目录,81,第,5,章 程序流程控制,5.1,操作运算语句,5.2,选择语句,5.3,循环语句,5.4,转移语句,5.5,预处理指令,82,5.1.1,终点与可达性,直观地说,语法上语句书写完成的地方就是该语句的终点。,如果一条语句可以被执行,则称它是可达的(,reachable,);相反,如果一条语句无法被执行,我们称它是不可达的(,unreachable,)。,83,5.1.2,函数调用语句,函数调用语句由函数调用加一个分号“;”构成一条语句。,例如:,Console.WriteLine(“Hello World!”);,84,5.1.3,语句块,语句块也被称为复合语句,它是用一对花括号“,”,括起的语句序列。,假如此语句序列被省略,则称块为空。,块可以嵌套。,85,5.1.4,空语句,空语句不进行任何操作。,一条空语句的执行只是简单地把控制跳到语句的结束点。,空语句可以被用在,while,语句中,此时它含有一个空地执行体,.,86,5.1.5,标号语句,一个标号语句允许一条语句前加上一个标号。,标号语句可以被用在语句块中,但不允许出现在嵌套语句中。,一个标号可以在它的作用域内通过,goto,语句来引用,.,执行一条标号语句时,就是执行标号后面的语句。,87,5.1.6,声明语句,声明语句可以声明一个局部变量或常量。,声明语句可以在语句块中出现,但是不允许在嵌套语句中出现。,1,局部变量声明,2,局部常量声明,88,5.1.7,表达式语句,表达式语句由一个表达式后接一个分号“;”组成。,在,C#,语言中,只有以下四类表达式可以成为表达式语句:,(,1,),new,对象创建表达式;,(,2,)调用表达式;,(,3,)赋值表达式;,(,4,)自增、自减表达式。,返回目录,89,5.2.1 if,语句,if,语句是条件选择语句,其常用的表达形式有:,if,(布尔表达式),语句组;,或,if,(布尔表达式),语句组,1,;,else,语句组,2,;,90,if,语句的控制流程,:,if,语句可以嵌套使用,每一条,else,与离它最近且没有其它,else,与之对应的,if,相搭配。,91,还可以使用,else-if,方法处理多个条件:,if,(布尔表达式,1,),语句组,1,;,else if,(布尔表达式,2,),语句组,2,;,else if,(布尔表达式,n,),语句组,n,;,else,语句组,n+1,;,92,5.2.2 switch,语句,switch,(表达式),case,常量表达式,1,:,语句组,1,break;,case,常量表达式,2,:,语句组,2,break;,case,常量表达式,n,:,语句组,n,break;,default,:,语句组,n+1,break;,93,在,C#,中程序员必须显式地告诉编译器停止,switch,语句的执行,这就要在,switch,语句中每个执行单元后添加,break,语句。当程序遇到,break,语句时,,switch,语句终止执行,程序的控制转移到,switch,语句后紧接的一条语句。,如果想让,C#,像,C+,那样,执行完某个,case,语句后能继续遍历其它的语句,则只需要明确地加入下面这两条跳转语句即可:,goto case label,:跳至标签语句执行;,goto default,:跳至,default,标签执行。,switch,语句后面括号中的表达式类型可以是,string,类型。,返回目录,94,5.3.1 while,语句,while,(布尔表达式),循环体,使用,break,语句结束,while,循环,执行后续语句;,使用,continue,语句停止循环体的执行,继续进行,while,循环。,95,5.3.2 do-while,语句,do,循环体,while,(布尔表达式);,同样允许用,break,语句和,continue,语句,96,5.3.3 for,语句,for,(表达式,1;,布尔表达式,2;,表达式,3,),循环体,97,5.3.4 foreach,语句,foreach,(变量类型 循环变量,in,集合表达式),循环体,98,1,对数组使用,foreach,语句,foreach,语句可用来为数组中的每一个元素执行一遍循环体中的语句。,因为不需要数组中的元素直接参与运算,也不需要事先知道数组元素的个数,所以对全体数组进行操作时用,foreach,语句效率很高。,2,对集合使用,foreach,语句,若要循环访问集合,在,foreach,语句中集合必须满足下列条件:,集合类型必须是,interface,、,class,或,struct,类型,还必须包括返回类型的,GetEnumerator,的实例方法。,循环变量类型包含一个,Current,属性(返回集合的当前元素)和,MoveNext(),方法。,返回目录,99,5.4.1 break,语句,break,语句用于终止最内层的,while,、,do-while,、,for,和,switch,语句的执行。,当程序遇到这一语句后,执行紧接在被终止执行的语句后面的语句。,其语法格式为:,break;,100,5.4.2 continue,语句,当程序遇到这一语句后,停止当前进行的这次循环并把控制返回到当前循环的顶部,以便于进行下一次循环。,与,break,语句不同的是,,continue,语句不是终止整个循环的执行,而仅仅终止当前这一次循环的执行。,其语法格式为:,continue;,101,5.4.3 goto,语句,goto,语句也能用来跳出循环和,switch,语句。它无条件地转移程序的执行控制,其转移目的地是一标号,因此要求标号与,goto,语句处在同一个函数中。,其语法格式为:,goto,标号,;,goto case,表达式,;,goto default;,由于大量或随意使用,goto,语句会使程序的流程无规律,程序的可读性降低,因此,目前该语句已经很少使用。,102,5.4.4 return,语句,return,语句将程序执行控制返回给该语句所在的函数成员的调用者。,其语法格式为:,return,表达式;,return,语句的表达式是可选的。,不能在,finally,块中使用,return,语句。,返回目录,103,104,5.5.1,条件编译,C#,的条件编译主要依靠预处理指令:,#if,、,#else,、,#elif,和,#endif,这四条预处理指令主要有以下四种基本组合方式:,#if,(判断条件),#endif,#if,(判断条件),#else#endif,#if,(判断条件),#elif,(判断条件),#endif,#if,(判断条件),#elif,(判断条件),#else#endif,105,C#,语言使用,#define,来定义符号,其一般的定义形式为:,#define,符号,与,#define,相对应,,#undef,指令可以用来撤消定义的符号,其一般的定义形式为:,#undef,符号,#undef,和,#define,必须放在所有其他非注释语句和非预处理指令语句的前面。,106,5.5.2,报告编译错误和警告,#warning,是以编译警告的形式输出字符串,程序仍可被编译通过,其一般的使用格式为,:,#warning,字符串,#error,是以编译错误的形式输出字符串,此时程序无法被成功编译,其一般的使用格式为,:,#error,字符串,#line,指令允许改变编译器报告的错误或警告信息的内容,其一般的使用格式为,:,#line,行号,文件名,107,5.5.3,定义代码块指令,#region,和,#endregion,用来指定需要采用扩展或者压缩方式显示的代码段,一般的使用格式如下:,#region,字符串,代码块,#endregion,#region,和,#endregion,要配对使用,,#region,标识代码块的头,,#endregion,标识代码块的尾。,返回目录,108,第,6,章 类,6.1,面向对象程序设计,6.2,类声明,6.3,类成员,6.4,类与结构,6.5,构造函数和析构函数,6.6,常量,6.7,字段,6.8,运算符重载,109,6.1.1,面向对象程序设计的基本概念,面向对象,=,对象,+,类,+,继承,+,通信,(,1,)抽象,(,2,)封装,(,3,)继承,(,4,)多态性,110,6.1.2,类与对象,1,对象(,object,),对象指的是一个实体的实例,在这个实体中包括了特定的属性数据和对这些数据进行操作的函数。,封装性、继承性、多态性,2,类(,class,),类是一组具有相同数据结构和相同操作的对象的集合。,在一个类中,每个对象都是类的实例,可以使用类中提供的方法。,创建类的对象的操作,被称为类的实例化。,返回目录,111,一个类就是一个数据结构,可以包含数据成员(常量、字段和事件)、函数成员(方法、属性、下标指示器、操作符、构造函数和析构函数)和嵌套的类型。,类声明语句声明一个新类,其语法格式为:,特征,修饰符,class,类名,:,基类名和任何实现接口的列表,类体,112,6.2.1,类修饰符,C#,支持的类修饰符有:,new,、,public,、,protected,、,internal,、,private,、,abstract,和,sealed,。,类声明中的类修饰符可以是上面几种之一或是它们的组合。,1,抽象类,2,密封类,113,6.2.2,类的基本规范,如果类声明时指定了基类的类型,那么就表示指定了当前声明的类的直接基类。但是如果类在声明时没有指定基类,或者基类仅列出了一些接口类型,那么当前声明的类的基类假定为,object,。,新派生的类必须可以访问其直接基类。,程序员在定义新类时不能以下列类为基类:,System.Array,、,System.Delegate,、,System.Enum,、,System.ValueType,返回目录,114,6.3.1,类继承,创建派生类要在派生类的名字后面加上冒号“:”,后面再跟上基类的名字。,派生类继承了基类的所有成员,包括成员变量和方法。派生类可以选择是否自己重新实现基类方法,如需重新实现可以用关键字,new,修饰新方法,它表示派生类故意隐藏和替代了基类方法。,115,类继承有以下几点需要注意的:,(,1,)如果一个类是从其他类派生的,那么该类也继承其直接基类的所有成员,但基类的构造函数和析构函数除外。,(,2,)继承具有传递性。,(,3,)派生类可以扩展它的基类。,(,4,)基类的构造函数和析构函数不能被继承,但是可以继承的其他成员的存取权限可能会影响到成员在类中的访问。,(,5,)派生类可以隐藏继承
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服