第4章 Visual C#案例基础C#面向对象编程进阶.ppt_第1页
第4章 Visual C#案例基础C#面向对象编程进阶.ppt_第2页
第4章 Visual C#案例基础C#面向对象编程进阶.ppt_第3页
第4章 Visual C#案例基础C#面向对象编程进阶.ppt_第4页
第4章 Visual C#案例基础C#面向对象编程进阶.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 Visual C#案例基础:C#面向对象编程进阶,4.1 委托和事件,4.2 接口,4.3 集合,4.4 String类与StringBuilder类,4.5 命名空间和局部类,4.6 泛型,知识点链接,L4.6 泛型,4.1 委托和事件,4.1.1 委托 定义委托使用关键字delegate: delegate int SomeDelegate(int nID, string sName); 再实例化: SomeDelegate d1 = new SomeDelegate(wr.InstanceMethod);/wr是对象,有InstanceMethod实例方法 最后调用: d1(5,

2、 aaa); 通过委托SomeDelegate实现对方法InstanceMethod的调用,调用还必须有一个前提条件:方法InstanceMethod有参数且和定义SomeDelegate的参数一致,并且返回值为int。方法InstanceMethod的定义: public int InstanceMethod(int nID, string sName) 委托的实例化中的参数既可以是实例方法,也可以是静态方法。,4.1.1 委托,【例EX4_1】 设计一个企业员工上下班管理的WinForm程序。当员工在自己的电脑中打开此程序时,单击“上班”按钮表示签到上班,单击“下班”按钮表示下班。 定义一

3、个管理上下班类“StartOffWork”,其中“StartWork”和“OffWork”方法分别管理上班和下班。 设计步骤: 1. 新建WinForm项目并添加控件 新建WinForm项目并命名为“EX4_1”,从工具箱中拖曳2个“Label”、2个Button”和1个“Timer”控件到窗体上。“Timer”控件图标为“ ”。 2. 设置控件与窗体属性 Form1、button1和button2的“Text”属性分别设置为“上下班管理器”、“上班”和“下班”,label1和label2的“Text”属性都设置为空值。timer1“Enabled”和“Interval”分别设置为“True”

4、和“1000”,表示每隔1秒引发一次Tick事件。,4.1.1 委托,3. 添加代码 打开timer1的属性窗口,单击“ ”图标,双击“Tick”,系统自动添加了“Tick”事件以及方法“timer1_Tick”。按【F7】键切换到窗体设计窗口,分别双击button1和button2按钮,在代码编辑窗口中添加代码,代码如下所示。 4. 运行程序 按【Ctrl+F5】组合键运行程序,单击“上班”按钮,结果如图4.1所示。如果单击“下班”按钮,弹出对话框,结果如图4.2所示。,图4.1 单击“上班”按钮结果 图4.2 单击“下班”按钮弹出的消息框,4.1.1 委托,说明: (1)“Timer”控件

5、是定期引发事件的组件。是为Windows窗体环境设计的。时间间隔的长度由Interval属性定义,其值以毫秒为单位。若启用了该组件,则每个时间间隔引发一个 Tick事件。这是添加要执行的代码的位置。Timer组件的主要方法包括Start和Stop,这两种方法可打开和关闭计时器。 (2)类“MessageBox”是显示可包含文本、按钮和符号(通知并指示用户)的消息框。其中显示消息框的“Show”方法有很多重载方法。例如:代码“MessageBox.Show(确实要关闭系统吗,系统提示,MessageBoxButtons.YesNo);”将弹出如图4.3所示的消息框。在后面章节将详细介绍消息框。,

6、图4.3 系统提示消息框,4.1.2 事件,C#事件是按“发布-预订”方式工作的。先在一个类中发布事件,然后在任意数量的类中对事件进行预订。事件的工作过程如图4.4所示。,图4.4 事件的工作过程,4.1.2 事件,C#事件机制是基于委托实现的,因此首先要定义一个委托EventHandler: public delegate void EventHandler(object sender , myEventArgs e) 其中: myEventArgs类:派生于EventArgs类(包含事件数据的类的基类),实现自定义事件数据的功能。 sender:表示发生事件的对象。 定义事件格式为: ev

7、ent 事件的委托名 事件名 如事件TextOut定义: public event EventHandler TextOut; 事件的激活一般写成: if (TextOut != null) TextOut(this,new EventArgs(); 检查TextOut事件有没有被订阅,如不为null,则表示有用户订阅。订阅事件的是事件确发类,首先实例化EventSource,然后订阅事件: evsrc.TextOut += new EventSource.EventHandler(CatchEvent);/evsrc是事件确发类对象 也可以取消订阅: evsrc.TextOut = new

8、EventSource.EventHandler(CatchEvent);,4.1.2 事件,【例EX4_2】 在现实生活中经常有些人对颜色的识别很模糊,利用事件设计一个简单的颜色辨认器来帮助人们正确识别颜色。 设计思路: 在这里定义3个类,事件确发类“ColorEvent”引发事件,事件处理类“ColorRecognize”显示颜色消息。派生于EventArgs类“ColorEventArgs”提供事件数据。 设计步骤: 1. 新建WinForm项目并添加控件 新建WinForm项目并命名为“EX4_2”,从工具箱中拖曳1个“GroupBox”、1个“Button”和4个“RadioButt

9、on”到窗体中,“RadioButton”控件的图标为“ ”。 2. 设置控件与窗体属性 radioButton1到radioButton4的“ForeColor”分别设置为“Red”、“Blue”、“Yellow”和“Green”,其中radioButton1的“Checked”属性设置为“True”。button1、groupBox1和Form1的“Text”属性设置为“确定”、“选择颜色”和“颜色辨认器”。,4.1.2 事件,3. 添加代码 双击button1,添加代码。代码如下所示。 4. 运行程序 按【Ctrl+F5】组合键运行程序,选择一种颜色单击“确定”按钮,结果如图4.5所示。

10、,图4.5 EX4_2运行的结果,4.1.2 事件,说明: (1)“RadioButton”控件为用户提供由两个或多个互斥选项组成的选项集。当用户选择某单选按钮时,同一组中的其他单选按钮不能同时选定。定义单选按钮组将告诉用户在这里有一组选项,可以从中选择一个且只能选择一个。 (2)例中“ColorEventArgs”类是从EventArgs类派生的,是为事件提供数据类,如果不需要为事件提供数据类,可以直接使用系统的EventArgs类作为类型。 (3)在典型的Windows窗体应用程序中,可订阅由控件引发的事件,例如按钮的单击事件,可使用Visual C#集成开发环境(IDE)来浏览控件发布的

11、事件,选择要处理的事件,IDE会自动添加空事件处理程序方法和订阅事件的代码。,4.2 接口,接口是用来定义一种程序的协定。接口好比一种模板,这种模板定义了实现接口的对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口的定义如下: public interface IPartA void SetDataA(string dataA); 接口使用关键字interface定义,接口可以使用的修饰符包括new、public、protected、internal、private等。接口的命名通常以“I”开头,如IpartA、IPartB。接口的成员可以是方法、属性、索引器和事件,但不可以

12、有任何的成员变量,也不能在接口中实现接口成员。接口不能被实例化。接口的成员默认是公共的,因此不允许成员加上修饰符。,4.2 接口,【例EX4_3】 设计一个简单的计算器。其中定义一个类“Calculate”和一个接口“ICalculateA”,用于计算的类“Calculate”继承接口“ICalculateA”。 设计步骤: 1. 新建WinForm项目并添加控件 新建WinForm项目并命名为“EX4_3”,在Form1中添加2个“TextBox”、1个“Button”、1个“Label”和1个“ComboBox”控件。其中“ComboBox”控件的图标为“ ”。 2. 设置属性 butto

13、n1和Form1的“Text”属性分别设置为“=”和“简单计算器”。在comboBox1属性窗口中,“Text”设置为“+”,选中“Items”,单击后面显示出的“ ”图标按钮,在弹出的“字符串集合编辑器”中输入“+”、“-”、“*”和“/”符号,如图4.6所示。,图4.6 输入运算符,4.2 接口,3. 添加代码 双击“=”按钮,添加代码,代码如下所示。 4. 运行程序 按【Ctrl+F5】组合键运行程序,输入数据,选择运算类型后单击“=”按钮,结果如图4.7所示。,图4.7 EX4_3运行结果,4.3 集合,4.3.1 使用Array类进行排序与查找 Array类是用于对数组进行排序和搜索

14、的类。Array类提供Sort()和BinarySearch()方法,用于排序及查找。另外,它还提供Reverse()方法进行反排序。 1. Array.Sort与Reverse方法 Array.Sort()方法可以实现对一维数组的排序。常用的几种形式如表4.1所示。,Array.Reverse()方法可以用来对整个数组的顺序进行反转,其形式如下: public static void Reverse(Arrary);,4.3.1 使用Array类进行排序与查找,2. Array.BinarySearch方法 Array.BinarySearch方法实现在已经排序的一维数组中查找元素,常用的几

15、种形式如表4.2所示。,4.3.1 使用Array类进行排序与查找,【例EX4_4】 设计一个对所输入的数组进行排序与查找的WinForm应用程序。 设计思路: 定义一个类“CSort”,在此类中定义数组的排序和查找方法,其中在各个方法中调用对应的Array的方法完成数组的排序与查找功能。 设计步骤: 1. 新建WinForm项目并添加控件 新建WinForm项目并命名为“EX4_4”,在Form1中添加4个“TextBox”、2个“Button”、1个“Label”和3个“CheckBox”控件。其中“CheckBox”控件的图标为“ ”。 2. 设置属性 Form1、label1、chec

16、kBox1、checkBox2、checkBox3、button1和button2的“Text”属性分别设置为“数组的排序与查找”、“输入数组:”、“正向排序:”、“反转数组:”、“查找位置:”、“确定”和“清空”。,4.3.1 使用Array类进行排序与查找,3. 添加事件代码 双击button1和button2,系统自动切换到代码编辑窗口,添加代码,代码如下所示。 4. 运行程序 按【Ctrl+F5】组合键运行程序,输入数据,选择需要的功能,如图4.8所示,单击“确定”按钮,结果如图4.9所示。,图4.8 输入数据图4.9 排序和查找的结果,4.3.2 使用Stack类,堆栈是一种后进先出

17、(LIFO)的数据结构。正如在货物管理中,有一些实时性非常强的货物,需要后入仓先出仓,如图4.10所示示意。,图4.10 后进先出,4.3.2 使用Stack类,Stack堆栈类表示对象的“后进先出”集合。为了创建Stack类的实例,需要调用Stack类提供的构造函数。Stack类的构造函数提供了三种重载形式,所以有三种实例化方法,如下所示: Stack sack1 = new Stack();/使用默认容量实例化 Stack sack2 = new Stack(new string5 堆栈元素1, 堆栈元素2, 堆栈元素3, 堆栈元素4, 堆栈元素5 ); /使用由string数组中的集合元

18、素初始化堆栈对象 Stack sack3 = new Stack(20); /创建堆栈对象并指定20个元素,4.3.2 使用Stack类,Stack类常用的方法如表4.3所示。Stack类将它的对象存储在数组中。只要数组足够大到可以存储新的对象,调用Push方法就是非常有效的。,4.3.2 使用Stack类,【例EX4_5】 利用Stack设计一个备忘录。 设计步骤: 1. 新建WinForm项目并添加控件 新建WinForm项目并命名为“EX4_5”,在Form1中添加2个“TextBox”、2个“GroupBox”、1个“Label”、3个“Button”控件和1个“MonthCalend

19、ar”控件。其中“MonthCalendar”控件的图标为“ ”。,2. 设置属性 button1、button2、button3、groupBox1、groupBox2和Form1的“Text”属性分别设置为“”、“”、“填写备忘录”、“所有备忘录”和“备忘录”。其中label1的“Text”属性设置为空值。控件的布局如图4.11所示。其中3个Button控件用于添加、修改和删除备忘录。,图4.11 控件布局,4.3.2 使用Stack类,3. 添加事件代码 分别双击3个Button控件。因为类“Stack”在“System.Collections”命名空间中,所以添加命名空间“using

20、System.Collections;”,添加代码,代码如下所示。 4. 运行程序 按【Ctrl+F5】组合键运行程序,选择有重要事件的日期,填写重要的事件,单击“ ”按钮添加备忘录。如果要修改,单击“ ”按钮修改。单击“ ”按钮删除刚添加的备忘录。如图4.12所示。,图4.12 添加备忘录,4.4 String类与StringBuilder类,String对象不可变(只读),因为一旦创建了该对象,就不能修改它的值。有些方法或运算符(例如串连运算符)看似修改String对象,但实际上是创建一个新的包含该修改的 String对象。例如: string s1 = Hello; string s2

21、= World; s1 += s2;/创建了一个新的字符串实例s1 在需要对某个字符串执行重复修改的情况下,例如,当以循环方式将一个或多个字符串连为一个字符串时,如果为每个操作都创建一个新的字符串对象,则与此关联的开销会很大,并会因此而导致性能大幅下降。,4.4 String类与StringBuilder类,StringBuilder会保留自己的字符串缓冲区,在针对StringBuilder执行字符串操作时,会先检查缓冲区的大小是否能容纳新的字符串,不够时再去增加需要的内存数量,因此大幅降低内存配置的操作次数,提高了效能。StringBuilder类的常用的构造函数、方法和属性如表4.4所示。

22、,4.4 String类与StringBuilder类,【例EX4_6】 设计一个简单的加密解密器。 设计步骤: 1. 新建WinForm项目并添加控件 新建WinForm项目并命名为“EX4_6”,在Form1中添加2个“TextBox”、2个“Label”和1个“MenuStrip”控件。其中“MenuStrip”控件的图标为“ ”。 2. 设置属性 label1、label2和Form1的“Text”属性分别设置为“加密前字符串:”、“加密后字符串:”和“简单加密解密器”。在“MenuStrip”控件中分别添加“加密”、“解密”和“清空”菜单项,如图4.13所示。,图4.13 添加菜单项

23、,4.4 String类与StringBuilder类,3. 添加事件代码 分别双击“加密”和“清空”菜单。添加代码,代码如下所示。 4. 运行程序 按【Ctrl+F5】组合键运行程序,输入要加密的字符,单击“加密”菜单,结果如图4.14所示。,图4.14 加密字符串,4.5 命名空间和局部类,4.5.1 命名空间 .NET Framework使用命名空间来组织众多的类,它是类的逻辑分类。当需要使用某个类时,可以使用带有命名空间的完全限定名,例如: System.Console.WriteLine(中国); 其中,System是一个命名空间,Console是该命名空间中包含的类,WriteLi

24、ne是该类的一个方法。如果使用using关键字引入了命名空间,则不必使用完全限定名,例如: using System Console.WriteLine(中国); 上面引用了系统的命名空间,当然,也可以使用namespace关键字来定义自己的命名空间,在编写大规模系统时,命名空间可用于帮助控制范围、组织代码。,4.5.1 命名空间,【例EX4_7】 修改【例EX4_6】,将其中类“Encrypt”放在另一个命名为“NSEncrypt”的命名空间中。 设计步骤: 1. 添加代码文件 打开【解决方案资源管理器】,使用鼠标右键单击【EX4_6】,在打开的菜单中执行【添加】【新建项】,在弹出的“添加新

25、项”对话框中选择“代码文件”模板,使用默认名称“CodeFile1.cs”,单击“添加”按钮。 2. 新建命名空间及添加代码 在“CodeFile1.cs”中引用命名空间“using System.Text;”,新建命名空间“NSEncrypt”,将“Form1.cs”中的类“Encrypt”剪切到此命名空间中,代码如下所示。,4.5.1 命名空间,3.“Form1.cs”中的代码 添加命名空间“using NSEncrypt;”,代码如下。 4. 运行程序 按【Ctrl+F5】组合键运行程序,结果与【EX4_6】相同。,4.5.2 局部类,在C#的WinForm程序设计中,一个窗体类的实现代

26、码被分成两个部分,放置在两个不同的源文件中。代码的第一部分是由代码产生器生成的,而第二部分是开发人员手工编写的。 【例EX4_8】 新建一个WinForm程序,查看VS2008所添加的局部类。 设计步骤: 1. 新建WinForm项目 新建WinForm项目并命名为“EX4_8”。 2. 查看代码 在“解决方案资源管理器”中打开“Form1.Designer.cs”文件,代码如下。,4.6 泛型,通常一个方法或过程的签名都是有明确的数据类型: public void ProcessData(int i) public void ProcessData(string i) public void

27、 ProcessData(double i) 这些方法的签名中的int、string和double 都是明确的数据类型,访问这些方法的过程中需要提供特定类型的参数: ProcessData(123); ProcessData(abc); ProcessData(12.34); 而如果将int、string和double这些类型也当成一种参数传给方法的时候,方法的定义便是这样: public void ProcessData(T t) /T是int、string和double这些数据类型的指代用户在调用的时候便成了这样: ProcessData(123); ProcessData(abc); P

28、rocessData(12.34);,4.6 泛型,【例EX4_9】 利用泛型设计一个简单的绩点计算器。 设计步骤: 1. 新建WinForm项目并添加控件 新建WinForm项目并命名为“EX4_9”,在Form1中添加2个“TextBox”、3个“Label”、2个“Button”、1个“ImageList”和1个“PictureBox”控件。其中“ImageList”控件和“PictureBox”控件的图标分别为“ ”和“ ”。,2. 设置属性 button1、button2、label1、label2和Form1的“Text”属性分别设置为“确定”、“清空”、“姓名:”、“分数:”和“

29、绩点计算器”。如图4.15所示。其中、label3的“Text”属性值设置为空值,pictureBox1的“SizeMode”属性设置为“Zoom”。 准备3张面孔图片分别表示“悲观”、“高兴”和“特棒”。打开imageList1属性窗口,选择“Images”属性,单击后面显示出的“ ”图标按钮,在弹出的“图像集合编辑器”对话框中分别添加准备好的3张图片。,图4.15 设计后的窗体,4.6 泛型,3. 添加事件代码 分别双击“确定”和“清空”按钮。添加代码,代码如下所示。 4. 运行程序 按【Ctrl+F5】组合键运行程序,输入姓名“王林”和成绩“65”,单击“确定”按钮,弹出确认对话框,单击

30、“确定”按钮后的结果如图4.16所示。,图4.16 EX4_9运行结果,4.6 泛型,说明: (1)ImageList组件用于存储图像,这些图像随后可由控件显示。图像列表能够为一致的单个图像目录编写代码。还可以使同一个图像列表与多个控件相关联。 (2)PictureBox控件用于显示位图、GIF、JPEG、图元文件或图标格式的图形。其常用的属性及说明如表4.5所示。,4.6 泛型,其中SizeMode的属性值及说明如表4.6所示。,(3)其他控件。除了以上介绍的控件外,还有很多其他Windows窗体控件。,L4.6 泛型,L1. 其他控件 1. LinkLabel控件 Windows窗体LinkLabel控件可以向Windows窗体应用程序添加Web样式的链接。一切可以使用Label控件的地方,都可以使用LinkLabel控件;还可以将文本的一部分设置为指向某个文件、文件夹或网页的链接。图标为“ ”。常用的属性以及事件如表4.7所示。,L1. 其他控件,2. RichTextBox控件 RichTextBox控件可以显示滚动条,这一点与TextBox控件相同;但是与TextBox控件不同的是,RichTextBox控件的默认设置是水平和垂直滚动条均根据需要显示,并且拥有更多的滚动条设置。图标为“ ”,RichTextBox控件常用的属性、方法及事件如表4.8

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论