《ASP.NET程序设计(高职计算机专业系列教材)第三章 C#编程语言.ppt》由会员分享,可在线阅读,更多相关《ASP.NET程序设计(高职计算机专业系列教材)第三章 C#编程语言.ppt(62页珍藏版)》请在三一办公上搜索。
1、第三章 C#编程语言,3.1 C#语法基础 3.2 控制结构 3.3 函数 3.4 事件驱动编程与回送 3.5 开发简单的C#程序,本章教学要求,本章主要介绍C#的基础知识,通过学习了解C#中的变量、数据类型、表达式;掌握C#的基本语法结构:选择、循环结构;了解C#的函数及事件驱动;能使用Visual Studio.NET编写简单的C#程序。,3.1 C#语法基础,3.1.1 C#中的变量和数据类型 3.1.2 标识符 3.1.3 运算符 3.1.4 表达式 3.1.5 语句和注释,3.1.1 C#中的变量和数据类型,常量和变量是编程语言中最基本的组成部分,主要用来记录程序中具有不同类型的信息
2、。常量表示其值不能被改变的量变量是在程序运行过程中数值可变的数据,通常用来记录运算的中间结果或保存数据,必须事先声明变量。变量声明:int a;string b;其中int和string为类型名,a、b为变量名。,3.1.1 C#中的变量和数据类型,C#中的变量命名需遵循以下原则:(1)变量名必须以字母开头。(2)变量名由字母、数字和下划线组成,不能包括空格、运算符、标点符号等符号。(3)变量名不能与C#中的关键字名称相同。(4)变量名不能与C#中的类库函数名称相同。,3.1.1 C#中的变量和数据类型,按类型值在内存中对应的位置:值类型和引用类型 两者的区别:在于进行数据存取时,值类型的变量
3、直接存储其数据;而引用类型的变量则存储其在系统中对应的存储地址。按数据的作用域大小:全局量和局部量按生存周期:自动生存周期、静态生存周期和动态生存周期按类型:基本类型和派生类型,3.1.1 C#中的变量和数据类型,按类型值在内存中对应的位置,值类型-整数类型,sbyte(有符号8位整数)byte(无符号8位整数)short(有符号16位整数)ushort(无符号16位整数)int(有符号32位整数)uint(无符号32位整数)long(有符号64位整数)ulong(无符号64位整数),值类型-布尔(bool)类型,布尔类型的取值仅有true和false两种 直接设置布尔变量 bool bTes
4、t=true;将一个表达式赋值给布尔变量 bool bTest=(c1&c10);,值类型-字符(char)类型,字符(char)类型用于表示一个Unicode字符,Unicode字符使用16位表示,可以表示世界上多数的字符。char ch=a;char ch=(char)64;,字符要用整数表示,必须使用显式的类型转换,值类型-字符(char)类型(转义符),使用反斜杠后接相应字符来表示特殊符号 char ch=;表示单引号,类型 表示含义 单引号 双引号 反斜杠0 空字符a 警告(Alert)b 退格,类型表示含义 f 换页 n 换行 r 回车 t 水平制表符 v 垂直制表符,值类型-浮点
5、类型,浮点类型包括float类型和double类型 在给float类型赋值时,必须在数字的后面加上f或F,否则会出错。C#中在操作符右边的数字将会被自动定义为double类型,如果不加字符f或F,编译器会认为程序是将一个double类型的数值赋给一个float变量。float fTest=12.34f;,值类型-小数(decimal)类型,小数类型是C#新引进的一个数据类型,非常适用于金融和货币运算。在定义小数类型的变量时,必须在数值后面加上字符m,否则,变量同样会被编译器当作double类型处理。decimal dTest=12.345m;,值类型-结构(struct)类型,C#中就建立了结
6、构和类(class)等类型来表示比较复杂的事物 其最明显的区别:结构类型是一种值类型,主要用来创建小型对象以节省空间,而class则是引用类型,值类型-struct类型,struct Point public int x,y;public point(int x,int y)this.x=x;this.y=y;,代码定义了Point这个结构类型变量来表示平面坐标系中的一个点,它有横坐标值x和纵坐标值y组成。两个成员变量是整数型,而Point(int x,int y)则被称为该结构的构造函数,用于声明一个Point结构类型的变量时进行成员变量的初始化。,值类型-枚举(enum)类型,枚举类型是一
7、种特殊的类型,它指定该类型变量可拥有的所有合法值。事实上枚举类型并不是真正意义上的新类型,它实际上表示的是一个整数类型,包括long、int、short、byte,默认类型是int。enum Colorl red,yellow,blue,black,一个普通形式的枚举类型,其元素类型均为int。red元素取值为0,yellow元素取值为1,以此类推,值类型-枚举(enum)类型,设置枚举元素的类型 enum Color2:long red,yellow,blue,black枚举元素类型设置为long类型,设置每个元素的值 enum Color3 red=10,yellow=20,blue=30
8、,black=40,引用类型-对象(object)类型,对象类型是其它所有类型的基础类型。在C#中每一种类型都直接或间接地继承object类类型。因此object类型的变量可以赋以任何类型的值。int i=1;object objtest=i;,引用类型-字符串(string)类型,string类型是直接从object中继承而来的类,用来表示一串字符序列。string 变量的值使用双引号包含起来:string sVar=“欢迎学习”;合并两个字符串时可以使用“+”:string sVar=“欢迎”+“学习!”;,类(class)类型 class类型定义了一种数据结构,这个数据结构中包含了数据成
9、员和函数成员以及事件。接口(interface)类型接口的定义类似于类。接口与类的最大区别在于接口只能定义属性、方法、事件的名称,而不能有具体的实现代码;只能从接口派生类,而不能对其进行实例化。指代(delegate)类型指代(delegate)是用来封装一个静态(static)方法或者一个对象实例以及该对象实例方法的数据结构,可以简单理解为指向函数的指针;但它比指针安全,更加适合面向对象的编程。,数组,数组是包含一串相同类型变量的数据结构。数组元素类型可以是任何类型,也包括数组类型。数组用下标确定每一个数组元素的索引号,通过索引来访问其成员变量的值。只有一个下标的数组称为一维数组,多于一个下
10、标的数组称为多维数组。int A;/int 型的一维数组int,A;/int型的二维数组int A;/int型的数组的数组初始化数组:int array1=new int 1,2,3,4;int,array2=new int,1,2,3,4,5,6;,3.1.2 标识符,在C#中,用来声明变量、函数以及其它各种用户定义的对象名都被称为标识符。标识符的长度可长可短,可以使用一个字符,也可以由若干字符组成。标识符的第一个字符必须是字母或下划线(_),后面跟随的字符可以是字母、数字或下划线。不能使用C#中的关键字作为标识符。,3.1.3 运算符(一),1、算术运算符:(+)、减()、乘(*)、整除(
11、/)或取余(%)2、位逻辑运算符:位与(&)、位或(|)、非()和异或()3、条件逻辑运算符:条件与(&)、条件或(|)和非(!)4、自增(+)运算符、自减运算符(-)5、移位运算符(右移)、=,注意赋值运算符(=)和等于(=)的差别。赋值运算符可以与其它数值运算符结合起来形成组合赋值运算符。,组合赋值运算符,运算符 表达式示例 含义=b=3;简单赋值(将3赋给变量b)*=b*=3;b=b*3/=b/=3;b=b/3%=b%=3;b=b%3+=b+=3;b=b+3-=b-=3;b=b-3=b3;b=b3=b=3;b=b3;b=b3,运算符(二),7、关系运算符:等于(=)、不等于(!=)、小于
12、()、小于等于(=),运算的结果是布尔值,只能为true或者false。8、条件运算符:(?:)是C#里最特殊的一种运算符,也是惟一的一个三元运算符。它是if-then-else语句的一种简写形式,格式如下所示:a=b?x:y它的含义是:如果b为真,将x值赋给变量a,否则将y值赋值给a。,运算符(三),9、typeof运算符:该运算操作返回一个类型对应的system.type。例如:typeof(int),结果是int32 typeof只能对类型操作,不能对变量操作。如int i;typeof(i);是不合法的。10、sizeof运算符该运算操作可获得一个类型所占的空间大小,以字节为单位。si
13、zeof(int);/结果是4。因为每个int型变量占用4个字节。,3.1.4 表达式,表达式是由运算符和运算对象按一定的规则组成的运算式,可分为算术表达式、关系表达式、逻辑表达式和赋值表达式。1、算术表达式:进行算术运算(如加、减、乘、除等)的表达式。5+6、b/3、a+b*c、a+b*(c/d-2)2、关系表达式:运算对象之间运行比较的表达式。(2+3)!=(3+2)a8 b*c=a*c 3、逻辑表达式:20,3.1.5 语句和注释,在C#中,语句是一个基本的指令单位。语句包括说明语句、表达式语句和流程控制语句等,语句一般以分号(;)结尾。说明语句:用于对变量、常量等的声明,int a;表
14、达式语句:由表达式构成,a=10;流程控制语句包括条件语句、循环语句和跳转语句等。多个语句则使用大括号()括起来作为一个语句块,它们在逻辑上作为一个单元来处理。用户在编写函数或各种条件语句、循环语句时经常用到语句块。,注释就是在程序中标记、说明某个程序的作用,不会被执行。有两种注释方法:(1)单行注释:/注释一行(2)多行注释:/*这里注释了几行信息第一行第二行*/,3.1.5 语句和注释,3.2 控制结构,3.2.1 选择结构3.2.2 循环结构3.2.3 跳转结构3.2.4 异常处理,3.2 控制结构,C#程序设计中有3种基本结构:顺序结构、选择结构、循环结构。顺序结构是最简单的结构,其中
15、的语句由简单语句组成,按程序语句的编写顺序依次执行。顺序结构简单易懂,符合人们的编写和阅读习惯,在编写一些简单的程序时比较适用。本节主要介绍选择结构、循环结构和控制程序结构的跳转语句。选择结构控制语句主要包括if语句和switch语句;循环结构控制语句主要包括while语句、for语句和do语句;跳转语句主要包括goto语句、break语句和continue语句等。,3.2.1 选择结构,选择结构是计算机根据所给定的条件为真与否,而决定从各实际可能的不同操作分支中执行某一分支的相应操作。1、if语句的语法形式:if(表达式)代码1;else 代码2;,当表达式为真(true)时,程序执行代码1
16、,表达式为假(false)时,执行代码2。else语句不是必须的,可以省略,也可以当需要对表达式为“假”进行操作时再加上。,if(ab)Console.WriteLine(“ab”);else Console.WriteLine(“ab”);,if语句可以嵌套使用,甚至可以多重嵌套。,2、switch语句,switch(表达式)case 常量1;语句1;break;case 常量2;语句2;break;default:语句n;break;,表达式可以表示需要判断的数据类型,这里包括sbyte、byte、short、ushort、int、uint、long、ulong、char、string或是
17、枚举类型等,每个case标号都设定为一个常数,这个常数值的类型与表达式的类型是一致的。,default后面的语句是在所有case所含常数值都不等于表达式时执行的语句。,Color1 bookColor;bookColor=(Color1)2;switch(bookColor)case Color1.red:Console.WriteLine(“red”);break;case Color1.yellow;Console.WriteLine(“yellow”);break;case Color1.blue:Console.WriteLine(“blue”);break;case Color1.b
18、lack:Console.WriteLine(“black”);break;default:Console.WriteLine(“没有这种颜色”);break;,结果将会显示“blue”,switch 语句举例:,3.2.2 循环结构,循环结构是一种常见的重要基本结构。程序设计中的循环是指从某处开始有规律地反复执行某一操作块(或程序块)的现象,并称重复执行的操作块(或程序块)为它的循环体。1、for循环 for(for-initializer;for-condition;for-iterator)语句块;,初始化程序所需的变量,表示for循环的条件,每次循环所进行的部分操作,3.2.2 循环结
19、构,for(int i=0;i3;i+)Console.WriteLine(i);结果将分行连续显示0、1和2。for循环条件中的3个选项都为可选项,所以可以使用多种for条件的组合。如:,for(;i3;i+)for(i=0;i+)for(i=0;i3;)for(;i+)for(i=0;)for(;i3;)for(;),2、while循环,while语句用于有条件地执行内嵌语句若干次。while(条件表达式)语句块;当条件表达式为真时,执行内嵌语句块,在while循环中可以用break和continue语句控制语句的执行。,举例:int j=0;while(j 3)Console.Write
20、Line(j);j=j+1;,3、do循环,do语句块;while(条件表达式);,举例:int k=10;do Console.WriteLine(k);while(k10);该例子的输出结果是:10,do循环是先执行后判断;而while语句是先判断后执行。所以do循环可以保证内嵌语句至少运行一次,这是它与while语句最大的区别。,3.2.3 跳转语句,C#中还可以用跳转语句来改变程序的执行顺序。1、break语句用于跳出语句块或循环语句,结束相应的语句块而转向执行下面的语句。,int i=0;for(;)Console.WriteLine(i);i+if(i=3)break;,利用bre
21、ak语句跳出一个无限循环,2、continue语句,continue语句也用来进行语句跳转。不过continue会跳出当前循环执行下一个循环语句。,for(int i=0;i=100;i+)if(i%2=0)continue;Console.WriteLine(i);,当数值可以被2整除时,会跳过下面的打印语句而跳到下一次循环,这样就只有奇数才会被打印出来,从而实现一个循环打印1到100之间的奇数,3.2.4 异常处理,异常通常是指程序在运行时发生的错误。异常产生的原因:用户的错误操作程序所在的平台发生错误可以预知的,例如除数为零、空对象引用,3.2.4 异常处理,1、C#三种形式的异常处理语
22、句:try-catch语句:用于捕获异常。其中try块中包含可能会产生异常的语句,catch块中包含捕获和处理异常的语句。try-finally语句:用于清处异常。不管try语句块中发生什么情况,程序总会执行finally语句块中的所有代码,这样,即使程序不能正常运行,也可以被我们控制在finally语句中。try-catch-finally语句:综合了前面两种语句的操作方式,用于处理所有的异常。,3.2.4 异常处理,2、异常处理语句的结构是:try/可能会产生异常的代码catch(对象名)/产生异常时执行的代码finally/总会执行的代码,3.2.4 异常处理,3、异常处理语句的执行顺序
23、是:(1)先执行try块内的代码,如果发行异常,则在产生异常的地方中断程序。(2)如果有catch语句,则检查该块的异常类型是否跟产生的异常类型一样,如果没有catch块,那么就执行finally语句块。(3)如果上面的catch语句不跟异常匹配,就检查其它catch块,如果有跟异常匹配的catch块,则执行它内部的代码,然后再执行finally语句块(如果有的话)。如果没有跟与它匹配的catch块,就执行finally语句块(如果有),在这之后再发生不能匹配的异常。,3.3 函数,C#允许用户只编写代码一次,然后将其运行任意需要的次数,以支持主代码体。这些小程序称为函数。函数是类或结构的成员
24、,C#不允许有全局函数,所有的函数必须在类或结构内实现。在C#中,函数也称为方法。,3.3.1 定义函数,函数的最简单的语法如下:()/code here,返回类型,参数,string MyFunction()return”OK”;,string MyFunction(string Name,string Age)return”OK”;,3.3.1 定义函数,返回类型为关键字void,不提供返回值 void Page_Load(),把函数指定为返回void,就不需要return关键字,3.3.2 调用函数,调用一个返回void的函数时,只需输入函数名,后跟左括号、用逗号分隔开的参数列表和右括号
25、。My VoidFunction(“Hello”);对于有返回值的函数,可以(但不是必须)提供一个变量来包含这个值。string ReturnValue;ReturnValue=MyFunctionWhichReturnsAString();,3.3.2 调用函数,1)按值传递参数在调用函数时,默认简单的数值按值传递给函数。这说明,在函数内部创建参数变量时,它们就包含了传递它们的值。,void Increment(int Number)Number+;void Page_Load()int A=1;Increment(A);Message.Text=A.ToString();,3.3.2 调用
26、函数,2)按引用传递参数如果要使函数中进行的计算影响到调用代码中变量的内容,可通过引用来传递参数。首先修改Increment()函数,以引用的方式传递数据。,void Increment(ref int Number)Number+;void Page_Load()int A=1;Increment(ref A);Message.Text=A.ToString();,3.3.2 调用函数,3)输出参数 C#的一个强大功能是一个函数可以给调用代码返回多个值。C#中out关键字指定的参数称为输出参数。,string SetNumber(out int Number)Number=10;Return
27、”OK”;void Page_Load()int A;string ReturnValue=SetNumber(out A);Message.Text=A.ToString();Message.Text=”+ReurnValue;,3.4 事件驱动编程与回送,3.4.1 C#中的委托 3.4.2 C#中的事件处理函数 3.4.3 事件驱动编程 3.4.4 回送,3.4.1 C#中的委托,C#中的委托允许你将一个对象中的方法传递给另一个能调用该方法的类的某个对象。你可以将类A中的一个方法m(被包含在某个委托中了)传递给一个类B,这样类B就能调用类A中的方法m了。同时,你还可以以静态(static
28、)的方式或是实例(instance)的方式来传递该方法。,3.4.1 C#中的委托,C#中的委托是通过继承System.Delegate中的一个类来实现的,下面是具体的步骤:1、声明一个委托对象,其参数形式一定要和你想要包含的方法的参数形式一致。2、定义所有你要定义的方法,其参数形式和第一步中声明的委托对象的参数形式必须相同。3、创建委托对象并将所希望的方法包含在该委托对象中。4、通过委托对象调用包含在其中的各个方法。,3.4.2 C#中的事件处理函数,C#中的事件处理函数是一个具有特定参数形式的委托对象,其形式如下:public delegate void MyEventHandler(ob
29、ject sender,MyEventArgs e);,触发该事件的对象,在事件处理函数中可以被运用的一些数据,3.4.2 C#中的事件处理函数,public class MyEventArgs EventArgspublic string m_myEventArgumentdata;通过关键字event来引用委托对象,方法如下:public event MyEventHandler MyEvent;,3.4.3 事件驱动编程,ASP.NET采用了回送技术,它将信息传送给服务器进行处理,而不是在客户浏览器上处理。这里的回送表示当用户触发一个事件时,信息可以传回到服务器。ASP.NET的事件驱动
30、特性允许将代码完全模块化到独立的函数中,当需要这样的函数时,直接运行它们即可。允许将代码完全模块化到独立的函数中,当需要这样的函数时,直接运行它们即可。,3.4.4 回送,回送就是一处理过程,该过程包括:浏览器将信息发送到服务器,告诉服务器处理事件,服务器完成此事件的处理工作并将得到的HTML再传回到浏览器。回送只作用于Web窗体,且只有服务器控件才能将信息传回到服务器。IsPostBack测试用于确定用户是否返回了窗体和数据,窗体是否是第一次显示。If(Page.IsPostBack)如果没有生成回送信息,这个测试就生成False,否则生成True。,3.5 使用Visual Studio.
31、NET开发C#程序,using System;class HelloWorld public stati void Main(string args)Console.WriteLine(“Hello World!”);,程序功能就是在屏幕上打印一个Hello World!,开发过程,演示:选择“文件”“新建”“项目”菜单项“Visual C#项目”/“模板”选择“控制台应用程序”目录位置/项目命名“解决方案资源管理器”窗口重命名 打开源文件输入程序代码 修正错误 编译程序“调试”“开始执行(不调试)”,小结,本章重点学习了C#的基本语法,介绍了值类型和引用类型两种数值类型,并对标识符、运算符、变量与表达式和语句等作了详细的介绍。C#的三个主要结构是使用ifelse和switchcase的分支结构,循环结构(for、do、while)和函数。它们可以控制ASP.NET程序的执行,确定执行哪个分支,重复执行一段代码几次,或者跳出一个函数,进入另一个函数。介绍了C#中的委托、事件处理函数及ASP.NET事件驱动编程与回送。对于如何通过Visual Studio.NET编写简单的C#应用程序读者有了初步的了解。,实训与习题,编写简单的C#应用程序 3-1、3-2思考3-3,