《c#程序设计期末总复习.ppt》由会员分享,可在线阅读,更多相关《c#程序设计期末总复习.ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C#C#程序设计总复习程序设计总复习程序设计总复习程序设计总复习计算机科学与技术计算机科学与技术张荣高张荣高考试题型考试题型v1.单项选择题(本大题共单项选择题(本大题共15小题,每小题小题,每小题1分,共分,共15分)分)v2.填空题(本大题共填空题(本大题共10空,每空空,每空1分,共分,共10分)分)v3.简答题(本大题共简答题(本大题共5小题,每小题小题,每小题6分,共分,共30分)分)v4.程序阅读题(本大题共程序阅读题(本大题共5小题,每小题小题,每小题6分,共分,共30分)分)v5.程序填空题(本大题共程序填空题(本大题共3小题,每小题小题,每小题5分,共分,共15分)分)第第1
2、 1章章 概述概述v.NET框架包括两个主要组件:框架包括两个主要组件:公共语言运行库(简称运行库)公共语言运行库(简称运行库)类库类库vVS.NET2008常用应用程序模板:常用应用程序模板:控制台应用程序,使用统一的重定向文本输出形式,在命令行方式控制台应用程序,使用统一的重定向文本输出形式,在命令行方式下运行,用于交互操作不多、主要偏重与内部功能实现的场合。下运行,用于交互操作不多、主要偏重与内部功能实现的场合。Windows应用程序,实现窗体形式操作界面,主要用于交互性操作应用程序,实现窗体形式操作界面,主要用于交互性操作较多场合。较多场合。ASP应用程序,通过应用程序,通过Inter
3、net传递可以被客户浏览的页面,如各类网传递可以被客户浏览的页面,如各类网站以及基于站以及基于Web的网络办公系统等的网络办公系统等第第1 1章章 概述概述v在在C#中,中,using关键字有关键字有3个用途:个用途:作为引用指令作为引用指令指明引用的命名空间指明引用的命名空间作为别名指令,用来简化命名空间的表达形式作为别名指令,用来简化命名空间的表达形式作为语句,用于定义一个范围作为语句,用于定义一个范围v应用程序的入口点规定为应用程序的入口点规定为MainMain方法声明为方法声明为publicstatic,除非有特殊理由,一般不要更改,除非有特殊理由,一般不要更改Main方法的声明方法的
4、声明Main方法的返回值只能是方法的返回值只能是void或者或者intMain方法可以放在任何一个类中方法可以放在任何一个类中一个应用程序中必须有一个类包含一个应用程序中必须有一个类包含Main方法。方法。第第2 2章章 数据类型与流程控制数据类型与流程控制vC#数据类型分为两类:值类型和引用类型。数据类型分为两类:值类型和引用类型。v值类型:值类型:简单类型简单类型:整型、浮点、整型、浮点、decimal、char、bool枚举类型:枚举类型:enum结构类型:结构类型:struct可空类型可空类型v引用类型:引用类型的变量又称为对象引用类型:引用类型的变量又称为对象类类:object、cl
5、ass、string接口:接口:interface数组数组委托委托:delegate第第2 2章章 数据类型与流程控制数据类型与流程控制v数值类型的变量和引用类型的变量,两者最根本区别在于:数值类型的变量和引用类型的变量,两者最根本区别在于:数值类型的变量本身包含他们的数据,而引用类型的变量包含的是,数值类型的变量本身包含他们的数据,而引用类型的变量包含的是,指向包含数据的内存的引用或者叫句柄。指向包含数据的内存的引用或者叫句柄。对于数值类型,每个变量有一份自己的数据复制,因而也就不能通对于数值类型,每个变量有一份自己的数据复制,因而也就不能通过操作其中的一个来影响到另一个。过操作其中的一个来
6、影响到另一个。而对于引用类型,两个变量有可能引用同一个对象,因而也就可能而对于引用类型,两个变量有可能引用同一个对象,因而也就可能通过操作其中的一个变量来影响也被另一个变量引用的对象通过操作其中的一个变量来影响也被另一个变量引用的对象第第2 2章章 数据类型与流程控制数据类型与流程控制v有两种转换方式:隐式转换与显式转换。如果是不同类型之间的转换,有两种转换方式:隐式转换与显式转换。如果是不同类型之间的转换,可以使用可以使用Convert类类vObject类型:是所有其他引用类型的类型:是所有其他引用类型的基类基类装箱:将值类型转换为装箱:将值类型转换为object类型类型拆箱:将拆箱:将ob
7、ject类型转换为值类型类型转换为值类型v控制台输出控制台输出Console.Write();Console.WriteLine();v控制台输入控制台输入Console.ReadKey();Console.ReadLine();第第2 2章章 数据类型与流程控制数据类型与流程控制v循环语句循环语句for语句语句while语句语句do-while语句,循环体内的程序至少会执行一次语句,循环体内的程序至少会执行一次foreach语句,对集合、数组进行操作语句,对集合、数组进行操作vforeachforeach语句用于逐个提取集合中的元素,并对集合中每个元素执行语语句用于逐个提取集合中的元素,并对
8、集合中每个元素执行语句序列中操作的场合句序列中操作的场合,注意循环变量是一个只读型的局部变量:注意循环变量是一个只读型的局部变量:foreach(foreach(类型类型 标识符标识符 in in 表达式表达式 )语句序列语句序列 第第2 2章章 数据类型与流程控制数据类型与流程控制vifif语句:根据语句:根据布尔表达式布尔表达式的值选择要执行的语句序列的值选择要执行的语句序列vswitch switch 语句也叫语句也叫casecase语句语句switchswitch条件表达式的值和每个条件表达式的值和每个casecase后的常量表达式可以是后的常量表达式可以是stringstring、i
9、ntint、charchar、enumenum或或其它值类型其它值类型每个每个casecase块的最后一句一定要是块的最后一句一定要是breakbreak语句语句vbreakbreak语句语句功能:功能:break语句只能出现在循环结构和语句只能出现在循环结构和switch结构中,退出结构中,退出break语语句所在循环结构和多分支结构句所在循环结构和多分支结构vcontinuecontinue语句语句功能:功能:continuecontinue语句语句只能出现在循环结构中,不执行循环体中的后只能出现在循环结构中,不执行循环体中的后续语句,返回循环的开头进行新的循环处理,只能结束续语句,返回循
10、环的开头进行新的循环处理,只能结束本次循环本次循环第第2 2章章 数据类型与流程控制数据类型与流程控制vtry-catchtry-catch语句语句在程序运行正常的时候,执行在程序运行正常的时候,执行trytry块内的程序。如果块内的程序。如果trytry块中出现了块中出现了异常,程序就转移到异常,程序就转移到catchcatch块中执行。块中执行。vtry-catch-finallytry-catch-finally语句语句vthrowthrow语句语句第第3 3章章 常用数据类型的用法常用数据类型的用法vString类的表示方法类的表示方法:stringstr=C:testfirst.cs
11、stringstr=C:testfirst.cs“v取字符串中的某个字符的方法取字符串中的某个字符的方法:stringmyString=sometext;charchFirst=myString2;/结果为结果为mvstring.Compare():比较字符串的内容。比较字符串的内容。vstring.Copy():将一个字符串内容原样复制到一个新字符串中将一个字符串内容原样复制到一个新字符串中vstring.Format():格式化字符串格式化字符串vContains():查找一个字符串中是否包含指定的子字符串:查找一个字符串中是否包含指定的子字符串vIndexOf():求某个字符或者子串在字
12、符串中出现的位置:求某个字符或者子串在字符串中出现的位置第第3 3章章 常用数据类型的用法常用数据类型的用法vSubstring():截取字符串:截取字符串vRemove():删除指定数量的字符:删除指定数量的字符vReplace():字符串替换:字符串替换vInsert():插入字符串:插入字符串vTrim():删除首部和尾部空格:删除首部和尾部空格vstring.Join():在数组的每个元素之间串联指定的分隔符,从而产生单:在数组的每个元素之间串联指定的分隔符,从而产生单个串联的字符串。语法为:个串联的字符串。语法为:publicstaticstringJoin(stringsepara
13、tor,stringvalue)vSplit():将字符串按照指定的一个或多个字符进行分离,从而得到一个:将字符串按照指定的一个或多个字符进行分离,从而得到一个字符串数组。常用语法为:字符串数组。常用语法为:publicstringSplit(paramscharseparator)第第3 3章章 常用数据类型的用法常用数据类型的用法vString类实际表示的是一系列不可变的字符。说其实例是类实际表示的是一系列不可变的字符。说其实例是“不可变的不可变的”,是因为无法直接修改给该字符串分配的堆中的字符串。例如,是因为无法直接修改给该字符串分配的堆中的字符串。例如myString+=andabit
14、more实际操作并不是在原来实际操作并不是在原来myString所占内存空间的所占内存空间的后面直接附加上第二个字符串,而是返回一个新后面直接附加上第二个字符串,而是返回一个新String实例,即重新为实例,即重新为新字符串分配内存空间。新字符串分配内存空间。classProgramstaticvoidChangeString(strings)s=newstring;staticvoidMain(stringargs)strings=oldstring;ChangeString(s);Console.WriteLine(s);第第3 3章章 常用数据类型的用法常用数据类型的用法v数组是一种数组
15、是一种引用类型引用类型,而不是值类型,而不是值类型vC#中可以有中可以有一维数组、多维数组、交错数组一维数组、多维数组、交错数组v在在C#中,数组的下标默认是从中,数组的下标默认是从0开始索引的。开始索引的。vinta=newint30;vint,b=newint3,5;Array.Sort():升序升序Array.Reverse():倒序倒序Contains()、IndexOf()Average()、Sum()、Max()、Min()第第3 3章章 常用数据类型的用法常用数据类型的用法v枚举(枚举(enum)是一组)是一组命名常量命名常量的集合,称为枚举成员列表。可以为一组的集合,称为枚举成
16、员列表。可以为一组在逻辑上密不可分的整数值提供便于记忆的在逻辑上密不可分的整数值提供便于记忆的符号符号,从而使代码更清晰,从而使代码更清晰,也易于维护也易于维护venumdaysMon,Tue,Wed,Thu,Fri,SatvEnum.GetNames(),Enum.GetValues()第第3 3章章 常用数据类型的用法常用数据类型的用法v泛型(泛型(Generic)是具有)是具有占位符占位符(类型参数)的类、结构、接口和方法,(类型参数)的类、结构、接口和方法,它与普通类的区别是泛型多了一个或多个表示类型的占位符,这些占位它与普通类的区别是泛型多了一个或多个表示类型的占位符,这些占位符用尖
17、括号括起来。例如:符用尖括号括起来。例如:publicclassMyClasspublicTMyPropget;set;/定义属性定义属性MyProppublicvoidPrint()Console.WriteLine(MyProp);第第3 3章章 常用数据类型的用法常用数据类型的用法vList泛型类表示可通过索引访问的强类型对象列表,该类提供了对泛型类表示可通过索引访问的强类型对象列表,该类提供了对列表进行搜索、排序和操作的方法。列表进行搜索、排序和操作的方法。Add():将指定值的元素添加到列表中:将指定值的元素添加到列表中AddRange():将指定值的元素集合添加到列表中:将指定值的
18、元素集合添加到列表中Insert():在列表的中间插入一个新元素:在列表的中间插入一个新元素Contains():测试该列表中是否存在某个元素:测试该列表中是否存在某个元素Remove():从列表中移除带有指定键的元素:从列表中移除带有指定键的元素Clear():移除列表中的所有元素:移除列表中的所有元素第第3 3章章 常用数据类型的用法常用数据类型的用法vMath类位于类位于System命名空间下,为三角函数、对数函数和其他通用数学命名空间下,为三角函数、对数函数和其他通用数学函数提供常数和静态方法。函数提供常数和静态方法。Math.Min()、Math.Abs()、Math.Sqrt()、
19、Math.PIvRandom类用于生成随机数类用于生成随机数v默认情况下,默认情况下,Random类的无参数构造函数使用系统时钟生成其种子值,类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的刻度数采用而参数化构造函数可根据当前时间的刻度数采用Int32值。值。v常用方法:常用方法:Randomr=newRandom();inti=r.Next(10);第第4 4章章 面向对象编程基础面向对象编程基础v构造函数:对类的成员进行初始化构造函数:对类的成员进行初始化v构造函数特点:构造函数特点:每个类至少有一个构造函数。若程序代码中没有构造函数则系统会每个类至少有一个构造
20、函数。若程序代码中没有构造函数则系统会自动提供一个默认的构造函数自动提供一个默认的构造函数一个构造函数总是和它的类名相同一个构造函数总是和它的类名相同构造函数不包含任何返回值构造函数不包含任何返回值(包括包括void)构造函数通常是构造函数通常是public的;若是的;若是private类型的,则该类不能被实例化,类型的,则该类不能被实例化,常用于只含有静态成员的类常用于只含有静态成员的类构造函数中不要进行初始化以外的事情;不要尝试显示调用构造函构造函数中不要进行初始化以外的事情;不要尝试显示调用构造函数。(构造函数在创建对象时被调用)数。(构造函数在创建对象时被调用)第第4 4章章 面向对象
21、编程基础面向对象编程基础v重载构造函数重载构造函数v有时候可能会遇到这样的情况:在一个类中的多个方法中都要用到某一有时候可能会遇到这样的情况:在一个类中的多个方法中都要用到某一个数据成员,而该成员值必须从其他类中传递过来。这时,无参数的构个数据成员,而该成员值必须从其他类中传递过来。这时,无参数的构造函数就不能胜任了,解决这个问题最好的办法就是:重载构造函数造函数就不能胜任了,解决这个问题最好的办法就是:重载构造函数v当字段和局部变量名相同时:当字段和局部变量名相同时:如果要引用静态字段,可以使用形式:如果要引用静态字段,可以使用形式:类名类名.字段名字段名如果是实例字段,则使用形式:如果是实
22、例字段,则使用形式:this.字段名字段名v静态成员:指定静态成员:指定类名类名调用调用v实例成员:指定实例成员:指定实例对象实例对象调用调用第第4 4章章 面向对象编程基础面向对象编程基础vC#中有以下成员访问修饰符:中有以下成员访问修饰符:Private:私有成员:私有成员,在类的内部才可以访问在类的内部才可以访问Protected:保护成员,该类内部和继承类中可以访问:保护成员,该类内部和继承类中可以访问Public:公共成员,完全公开,没有访问限制:公共成员,完全公开,没有访问限制Internal:在同一命名空间内可以访问:在同一命名空间内可以访问第第4 4章章 面向对象编程基础面向对
23、象编程基础v属性的作用:可以限制外部对类中成员变量的存取权限。属性的作用:可以限制外部对类中成员变量的存取权限。v属性的声明和定义属性的声明和定义指定字段级别的访问指定字段级别的访问指定属性的类型和名称指定属性的类型和名称声明声明get访问器和访问器和set访问器访问器get:用来读取数据成员的值:用来读取数据成员的值set:用来设置数据成员的值:用来设置数据成员的值使用使用value的隐含参数的隐含参数publicclassMyClassprivateintnumber=0;publicintNumbergetreturnnumber;setif(value0)number=value;第第
24、4 4章章 面向对象编程基础面向对象编程基础v结构结构struct是由一系列相关的、但类型不一定相同的变量组织在一起而是由一系列相关的、但类型不一定相同的变量组织在一起而构成的数据表示形式,所有结构类型都隐式地从类型构成的数据表示形式,所有结构类型都隐式地从类型object继承继承v结构和类的区别:结构和类的区别:结构是一个值类型,保存在栈上;类是一个引用类型,保存在受管结构是一个值类型,保存在栈上;类是一个引用类型,保存在受管制的堆上制的堆上对结构中的数据进行操作比对类或对象中的数据进行操作速度要快对结构中的数据进行操作比对类或对象中的数据进行操作速度要快一般用结构存储多种类型的数据,当创建
25、一个很多类或对象共用的一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高小型对象时,使用结构效率更高第第4 4章章 面向对象编程基础面向对象编程基础v方法是一组程序代码的集合,每个方法都有一个方法名,便于识别和让方法是一组程序代码的集合,每个方法都有一个方法名,便于识别和让其他方法调用其他方法调用v对于方法,参数传递分为对于方法,参数传递分为值传递值传递和和引用传递引用传递两种两种值参数(值传递)值参数(值传递)形参不加任何修饰符;形参不加任何修饰符;引用参数(引用参数(ref传递)传递)形参以形参以ref修饰符声明修饰符声明注意:作注意:作ref传递的实参
26、必须初始化;调用时实参必须指明传递的实参必须初始化;调用时实参必须指明ref输出参数(输出参数(out传递)传递)形参以形参以out修饰符声明,能返回一个或多修饰符声明,能返回一个或多个值给用户个值给用户(调用时实参必须指明调用时实参必须指明out)数组参数(数组参数(param传递)传递)形参以形参以param修饰符声明。(数组默修饰符声明。(数组默认的参数传递方式)认的参数传递方式)第第4 4章章 面向对象编程基础面向对象编程基础v方法重载:指具有方法重载:指具有相同的方法名相同的方法名,但,但参数类型或参数个数不完全相同参数类型或参数个数不完全相同的的多个方法可以同时出现在一个类中多个方
27、法可以同时出现在一个类中v面向对象的基本特征面向对象的基本特征封装:封装:将描述对象的数据及处理这些数据的代码组装在一起,形成将描述对象的数据及处理这些数据的代码组装在一起,形成一个不可分割的独立单位(类),并尽可能地隐藏对象的内部细节,一个不可分割的独立单位(类),并尽可能地隐藏对象的内部细节,只保留有限的对外接口使之与外界发生联系只保留有限的对外接口使之与外界发生联系继承:继承:就是指不需要编写相同的代码,子类可以从基类继承其全部就是指不需要编写相同的代码,子类可以从基类继承其全部属性和方法属性和方法多态:多态:所谓多态性就是指同一个名字可以代表不同、但相似的功能。所谓多态性就是指同一个名
28、字可以代表不同、但相似的功能。程序运行时,面向对象的语言会自动判断对象的派生类型,并调用程序运行时,面向对象的语言会自动判断对象的派生类型,并调用相应的方法相应的方法第第5 5章章 面向对象的高级编程面向对象的高级编程v两种实现继承的方式:类继承和接口继承。两种实现继承的方式:类继承和接口继承。类继承类继承只允许只允许单一继承单一继承,接口接口可实现可实现多重继承多重继承。被继承的类叫基类被继承的类叫基类继承自其他类的类叫扩充类,扩充类继承了所有定义在基类中数据继承自其他类的类叫扩充类,扩充类继承了所有定义在基类中数据的定义和方法。但的定义和方法。但扩充类不继承基类的构造函数扩充类不继承基类的
29、构造函数第第5 5章章 面向对象的高级编程面向对象的高级编程v虚方法虚方法v在基类中,如果想让某个方法或者事件被扩充类重写,可以使用修饰符在基类中,如果想让某个方法或者事件被扩充类重写,可以使用修饰符virtual表明:表明:publicvirtualvoidmyMethod()v扩充类则用扩充类则用override重写重写:publicoverridevoidmyMethod()v使用虚拟方法和重写方法时,要注意下面几个方面:使用虚拟方法和重写方法时,要注意下面几个方面:虚拟方法不能声明为静态的。虚拟方法不能声明为静态的。virtual不能和不能和private一起使用。一起使用。重写方法的
30、名称、参数个数、类型以及返回值都必须和虚拟方法的重写方法的名称、参数个数、类型以及返回值都必须和虚拟方法的一致。一致。第第5 5章章 面向对象的高级编程面向对象的高级编程v隐藏基类的方法隐藏基类的方法new作为运算符,用于创建对象和调用构造函数作为运算符,用于创建对象和调用构造函数new作为修饰符,在扩充类中,隐藏基类中同名的方法或属性作为修饰符,在扩充类中,隐藏基类中同名的方法或属性v抽象类使用抽象类使用abstract修饰符修饰符,只能做基类只能做基类v抽象类与非抽象类的区别:抽象类与非抽象类的区别:抽象类不能直接被实例化,只能在扩充类中通过继承使用,对抽象抽象类不能直接被实例化,只能在扩
31、充类中通过继承使用,对抽象类使用类使用new运算符会产生编译时错误。运算符会产生编译时错误。抽象类可以包含抽象成员,而非抽象类不能包含抽象成员。当从抽抽象类可以包含抽象成员,而非抽象类不能包含抽象成员。当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员。象成员。第第5 5章章 面向对象的高级编程面向对象的高级编程publicabstractclassApublicA()Console.WriteLine(A);publicvirtualvoidFun()Console.WriteLine(A.Fun();public
32、classB:ApublicB()Console.WriteLine(B);publicnewvoidFun()Console.WriteLine(B.Fun();classProgrampublicstaticvoidMain()Aa=newB();a.Fun();第第5 5章章 面向对象的高级编程面向对象的高级编程vC#在内部按照下列顺序处理构造函数:从扩充类依次向上寻找其基类直在内部按照下列顺序处理构造函数:从扩充类依次向上寻找其基类直到找到最初的基类,然后开始执行最初的基类的构造函数,再依次向下到找到最初的基类,然后开始执行最初的基类的构造函数,再依次向下执行扩充类的构造函数,直至执行
33、完最终的扩充类的构造函数为止。执行扩充类的构造函数,直至执行完最终的扩充类的构造函数为止。v用用C#编写方法时,如果在扩充类中重写基类的方法,需要用编写方法时,如果在扩充类中重写基类的方法,需要用override声声明;要隐藏基类的方法,需要用明;要隐藏基类的方法,需要用new声明,这是声明,这是C#进行版本控制的依据。进行版本控制的依据。调用非虚拟方法时不会受到版本的影响调用非虚拟方法时不会受到版本的影响调用虚拟方法的实现部分可能会因扩充类的重写而影响执行结果。调用虚拟方法的实现部分可能会因扩充类的重写而影响执行结果。第第5 5章章 面向对象的高级编程面向对象的高级编程classApubli
34、cvirtualvoidMethod()Console.WriteLine(A.Method);classB:ApublicnewvirtualvoidMethod()Console.WriteLine(B.Method);classC:BpublicoverridevoidMethod()Console.WriteLine(C.Method);classProgramstaticvoidMain()Aa=newA();Bb=newC();Ac=b;a.Method();b.Method();c.Method();Console.ReadLine();第第5 5章章 面向对象的高级编程面向对象
35、的高级编程v使用使用interface声明一个接口,主要特点是只有声明一个接口,主要特点是只有声明部分声明部分,没有实现部分。,没有实现部分。v定义在接口中的方法都是定义在接口中的方法都是public的,接口成员的实现是通过类完成的。的,接口成员的实现是通过类完成的。v接口和抽象类区别接口和抽象类区别:接口支持多继承;抽象类不能实现多继承。接口支持多继承;抽象类不能实现多继承。接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。现的成员。接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。接口是一组行为规范;抽象类
36、是一个不完全的类,着重族的概念。接口可以用于支持回调;抽象类不能实现回调,因此继承不支持。接口可以用于支持回调;抽象类不能实现回调,因此继承不支持。接口只包含方法、属性、索引器、事件的签名,但不能定义字段和接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,例如,struct就可以继承接口,而不能继承类就可以继承接口,而不能继承类第第5 5章章 面向
37、对象的高级编程面向对象的高级编程v委托委托v类似与类似与C+中的函数指针,不同的是中的函数指针,不同的是C+语言的函数指针只能够指向静语言的函数指针只能够指向静态的方法,而委托除了可以指向静态的方法之外,还可以指向对象实例态的方法,而委托除了可以指向静态的方法之外,还可以指向对象实例的方法。的方法。v委托最大特点是:它不知道或不关心自己引用的对象的类。委托最大特点是:它不知道或不关心自己引用的对象的类。v委托的应用:回调机制、事件处理委托的应用:回调机制、事件处理v委托的声明和使用委托的声明和使用publicdelegatevoidFuncDelegate(stringstr););第第5 5
38、章章 面向对象的高级编程面向对象的高级编程v1声明一个委托对象,其参数形式一定要和你想要包含的方法的参数声明一个委托对象,其参数形式一定要和你想要包含的方法的参数形式形式一致一致。publicdelegatevoidMyDelegate(参数);参数);v2定义所有你要定义的方法,其参数形式和第一步中声明的委托对象定义所有你要定义的方法,其参数形式和第一步中声明的委托对象的参数形式必须相同。的参数形式必须相同。Method(参数);(参数);v3创建委托对象并将所希望的方法包含在该委托对象中。创建委托对象并将所希望的方法包含在该委托对象中。MyDelegateobjMyDelegate=new
39、MyDelegate(类类.Method);v4通过委托对象调用包含在其中的各个方法。通过委托对象调用包含在其中的各个方法。objMyDelegate(待传入参数待传入参数)publicdelegatestringMyDelegate(stringname);publicclassProgrampublicstaticstringFunctionA(stringname)returnAsayHelloto+name;publicstaticstringFunctionB(stringname)returnBsayHelloto+name;publicstaticvoidMethodA(MyDe
40、legateMe)Console.WriteLine(Me(张三张三);publicstaticvoidMain()MyDelegatea=newMyDelegate(FunctionA);MyDelegateb=newMyDelegate(FunctionB);MethodA(a);MethodA(b);Console.ReadLine();第第5 5章章 面向对象的高级编程面向对象的高级编程v事件事件v事件是响应用户对鼠标、键盘操作或自动执行某个与事件关联的方法的事件是响应用户对鼠标、键盘操作或自动执行某个与事件关联的方法的行为。事件和方法一样具有签名,签名包括名称和参数列表。行为。事件和
41、方法一样具有签名,签名包括名称和参数列表。v事件的签名通过委托类型来定义,为事件定义委托的常用形式为:事件的签名通过委托类型来定义,为事件定义委托的常用形式为:publicdelegateMyEventHandler(Objectsender,EventArgse)v事件可以使用事件可以使用event关键字进行声明,例如:关键字进行声明,例如:publiceventMyEventHandlerTriggerIt;v若要引发该事件,可以定义引发该事件时要调用的方法,如下例所示:若要引发该事件,可以定义引发该事件时要调用的方法,如下例所示:publicvoidTrigger()TriggerIt(
42、);v可以通过可以通过“+=”和和“-=”运算符向事件添加委托来订阅或取消对应的事运算符向事件添加委托来订阅或取消对应的事件。件。classTestEventpublicdelegatevoidMyEventHandler();publiceventMyEventHandlerClick;publicvoidTrigger()Click();publicvoidM1()Console.WriteLine(Hello!);publicvoidM2()Console.WriteLine(Helloagain!);publicvoidM3()Console.WriteLine(Good-bye!);
43、staticvoidMain()TestEventmyEvent=newTestEvent();myEvent.Click+=newMyEventHandler(myEvent.M1);myEvent.Click+=newMyEventHandler(myEvent.M2);myEvent.Click+=newMyEventHandler(myEvent.M3);myEvent.Trigger();myEvent.Click-=newMyEventHandler(myEvent.M2);Console.WriteLine(不再引发不再引发Helloagain!);myEvent.Trigger
44、();Console.ReadLine();第第6 6章章 窗体、控件和组件窗体、控件和组件v1、窗体应用程序的启动和停止、窗体应用程序的启动和停止v使用使用Application类提供的静态方法来启动、停止应用程序类提供的静态方法来启动、停止应用程序vApplication类提供的方法:类提供的方法:vRun方法:用于在当前线程上启动应用程序消息循环,并方法:用于在当前线程上启动应用程序消息循环,并显示窗体显示窗体staticvoidMain()Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDef
45、ault(false);Application.Run(newForm1();第第6 6章章 窗体、控件和组件窗体、控件和组件v如何在代码中打开一个新窗体如何在代码中打开一个新窗体vForm2fm=newForm2();vfm.Show();或者或者fm.ShowDialog();v模式对话框模式对话框是指用户只能在当前的对话框窗体进行操作,在该窗体关闭是指用户只能在当前的对话框窗体进行操作,在该窗体关闭之前不能切换到程序的其他窗体,通过窗体的之前不能切换到程序的其他窗体,通过窗体的ShowDialog()方法显示。方法显示。v非模式对话框非模式对话框是指当前所操作的对话框窗体可以与程序的其他
46、窗体切换,是指当前所操作的对话框窗体可以与程序的其他窗体切换,通过窗体的通过窗体的Show()方法方法显示显示Load:窗体载入事件,当窗体载入时触发该事件。例如运行应用程:窗体载入事件,当窗体载入时触发该事件。例如运行应用程序时,窗体序时,窗体frmMain显示,则触发了显示,则触发了frmMain的的Load事件。事件。第第6 6章章 窗体、控件和组件窗体、控件和组件v对话框用于与用户交互和检索信息。对话框用于与用户交互和检索信息。vMessageBox对话框:调用对话框:调用MessageBox类的类的静态静态Show方法方法来来显示消息对话框。返回值是显示消息对话框。返回值是Messa
47、geBoxResult枚举枚举的值,其的值,其中每个值都等同于消息对话框可以显示的按钮之一。中每个值都等同于消息对话框可以显示的按钮之一。vShow方法提供了多种重载形式,常用的重载形式有:方法提供了多种重载形式,常用的重载形式有:publicstaticDialogResultShow(stringtext)publicstaticDialogResultShow(stringtext,stringcaption)publicstaticDialogResultShow(stringtext,stringcaption,MessageBoxButtonsbuttons,MessageBoxI
48、conicon)第第6 6章章 窗体、控件和组件窗体、控件和组件vText:在消息框中显示的文本。:在消息框中显示的文本。vcaption:在消息框的标题栏中显示的文本。:在消息框的标题栏中显示的文本。vbuttons:MessageBoxButtons枚举值之一,指定在消息框中显示哪些按枚举值之一,指定在消息框中显示哪些按钮。枚举值有钮。枚举值有OK、OKCancel、YesNoCancel和和YesNo。vicon:MessageBoxIcon枚举值之一,指定在消息框中显示哪个图标。枚枚举值之一,指定在消息框中显示哪个图标。枚举值有举值有None(不显示图标)、(不显示图标)、Hand(手
49、形)、(手形)、Question(问号)、(问号)、Exclamation(感叹号)、(感叹号)、Asterisk(星号)、(星号)、Stop(停止)、(停止)、Error(错(错误)、误)、Warning(警告)和(警告)和Information(信息)。(信息)。vShow方法的返回值是方法的返回值是DialogResult枚举值之一。枚举值之一。DialogResult枚举值有:枚举值有:None(消息框未返回值)、(消息框未返回值)、OK、Cancel、Yes和和No。第第6 6章章 窗体、控件和组件窗体、控件和组件vColorDialog:提供颜色选择:提供颜色选择v方法:方法:Sh
50、owDialog()()返回值:返回值:DialogResult类型类型vFontDialog:提供字体选择。:提供字体选择。v方法:方法:ShowDialog()()返回值:返回值:DialogResult类型类型v用法如下:用法如下:ColorDialogcolorDlg=newColorDialog();if(colorDlg.ShowDialog()=DialogResult.OK)textBox1.ForeColor=colorDlg.Color;第第6 6章章 窗体、控件和组件窗体、控件和组件v常用属性:常用属性:Name:设置控件名称,代码中通过该属性来访问控件:设置控件名称,代