接口代理和事件复习课程

上传人:yuzo****123 文档编号:137234425 上传时间:2020-07-06 格式:PPT 页数:115 大小:570KB
返回 下载 相关 举报
接口代理和事件复习课程_第1页
第1页 / 共115页
接口代理和事件复习课程_第2页
第2页 / 共115页
接口代理和事件复习课程_第3页
第3页 / 共115页
接口代理和事件复习课程_第4页
第4页 / 共115页
接口代理和事件复习课程_第5页
第5页 / 共115页
点击查看更多>>
资源描述

《接口代理和事件复习课程》由会员分享,可在线阅读,更多相关《接口代理和事件复习课程(115页珍藏版)》请在金锄头文库上搜索。

1、第10章 接口、代理和事件,(时间:3次课,6学时),第10章 接口、代理和事件,前面已经介绍了有关面向对象程序设计的基本实现技能,本章将介绍一些面向对象程序设计的高级技术:接口、代理和事件。接口和代理都属于C#语言的引用数据类型,而事件是C#语言新增加的一个成员。由于事件和代理有很密切的关系,所以把事件也放在本章介绍。 本章教学目的: 了解接口和类的区别 掌握接口的定义,实现和使用 掌握创建和使用代理的方法 掌握Delegate类和MulticastDelegate类实现多重代理的方法 掌握创建和使用事件的方法,第10章 接口、代理和事件,10.1 接 口 10.2 代 理 10.3 事 件

2、,10.1 接 口,10.1.1 接口与类 10.1.2 接口的定义 10.1.3 接口的实现与使用 10.1.4 接口映射 10.1.5 显式接口成员实现 10.1.6 接口实现的继承 10.1.7 接口的重新实现 10.1.8 接口的查询,10.1.1 接口与类,在C#中需要实现多重继承时,就要使用接口技术。接口具有类似于抽象类的地位,它只具有“被继承”特性,所以接口也像抽象类一样,是一个最高层次的“基类”。但抽象类只能实现单继承,而接口可实现多继承。因此,在C#中,接口和抽象类既有相同的继承特性(最高层“基类”),又有不同的实现机制。 抽象类指的是至少包含一个抽象方法的类,而抽象方法指的

3、是被继承时,必须被重写的方法。而接口是另一种类似于抽象类的引用类型,它主要用来声明要定义的类中将包含哪些功能(方法、属性、索引或事件),但不包含这些功能的实例化代码(同抽象类),只在“继承”(通常,在接口技术中称为“实现”,以便与类中的“继承”有所区别)时才实例化这些功能的代码(也同抽象类)。换句话说,接口只是定义了类必须做什么,而不是怎样做。 一旦定义了一个接口,许多类都可以实现它。所谓“实现接口”就是意味着某个将要使用这个接口的类,必须为该接口所定义的方法、属性、索引或事件提供实体(实现的代码)。,10.1.1 接口与类,所以说接口类似于抽象类,但它与类之间有以下区别: 接口只提供类所需实

4、现的方法、属性、索引或事件的格式或约定,不提供任何相应的功能代码。具体的功能代码由继承(使用)该接口的类或结构来实现,这叫作“接口实现”。 接口中只包含方法、属性、索引或事件,而不包含任何数据成员、构造函数、析构函数和静态函数,而且接口中的所有成员都被视为公有,不能有任何访问修饰符。 要实现接口的类必须实现接口中的所有成员,即当一个接口或类从其他接口继承时,它将继承它的基接口中的所有成员。而抽象类则可以根据需要重载部分或全部抽象成员。 接口允许多重继承。一个接口可从多个基接口继承,并包含这些基接口继承树上的所有基接口;一个类可以从多个基接口继承;但一个类最多只能有一个直接父类。,10.1.1

5、接口与类,在实际应用中是使用接口还是抽象类为组件提供多态性,一般从以下几点考虑: 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。 如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。 如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。 如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的

6、实现。,10.1.2 接口的定义,1. 接口定义 接口定义的语句格式为: 代码属性 修饰符 interface 接口名:基接口列表 /接口成员定义体 ,10.1.2 接口的定义,2. 接口成员声明 接口成员包括从基接口继承的成员以及接口自身定义的成员。接口成员可以是方法、属性、索引和事件,但不能有常数、运算符、构造函数、析构函数、类型和静态成员。因为接口只具有“被继承”的特性,所以默认时,所有接口成员只具有public特性,接口成员的声明中不能含有任何其他修饰符。,10.1.2 接口的定义,(1)接口的方法成员声明格式如下: 代码属性 new 返回值类型 方法名(参数1,参数2,.); 接口中

7、只能提供方法的格式声明,而不能包含方法的实现,所以接口方法的声明总是以分号结束。 用户可以使用new修饰符在派生的接口中隐藏基接口的同名方法成员,其作用与类中new修饰符的作用相同。例如: interface IA void Math(); interface IB: IA /接口IB继承接口IA new void Math(); /如果不加new修饰符,将会有警告。加上new就可消除 ,10.1.2 接口的定义,【例10.1】定义一个接口DataSeries,任何类使用该接口可以产生一系列数字。 public interface DataSeries int getNext(); /返回数字

8、系列中的下一个数字 void reset(); /重新开始 void setStart(int x); /设置初始值 ,10.1.2 接口的定义,(2)接口的属性成员声明格式如下: 代码属性 new 属性类型 属性名get;和/或set; 同理,接口中的属性成员不能包含实现,所以只能以分号结束。在接口属性成员中同样也可以使用new修饰符来隐藏从基接口继承的同名属性成员。接口属性成员的访问方式有只读、只写和可读写3种,如表10.1所示。,10.1.2 接口的定义,表10.1 接口属性的访问方式,10.1.2 接口的定义,【例10.2】重写接口DataSeries,通过类MyThree实现接口,同

9、时使用接口属性来获取数列中的下一个元素。 using System; public interface DataSeries /接口 int Next /接口的一个属性 get; /返回数列的下一个数字 set; /设置下一个数字 class MyThree: DataSeries /实现接口DataSeries int x; public MyThree()x=0; /构造函数 public int Next /实现接口属性:获取或设置值 get x+=3; return x; set x=value; class App /应用类 public static void Main() MyT

10、hree ob=new MyThree (); for (int i=0; i3; i+) /通过属性访问接口 Console.WriteLine(Next value is + ob.Next); Console.WriteLine(nStarting at 100); ob.Next=100; for (int i=0; i3; i+) /通过属性访问接口 Console.WriteLine(Next value is + ob.Next); ,10.1.2 接口的定义,程序输出结果如下: Next value is 3 Next value is 6 Next value is 9 St

11、arting at 100 Next value is 103 Next value is 106 Next value is 109,10.1.2 接口的定义,(3)接口的索引器成员声明格式如下: 代码属性 new 数据类型 this 索引器参数类型 参数名 get; 和/或set; 此格式中的代码属性和new修饰符的用法和作用,与接口的方法成员和属性成员声明的含义完全一样。 声明中的“数据类型”是指索引器引入的元素类型,接口声明中的索引器成员只能用来指定索引器的访问方式,同表10.1。同样不允许在索引器参数上使用out和ref关键字。 例如: interface IA name(yang

12、yan ) /附加信息(即属性说明) int this int index ger; set; /索引器定义 ,10.1.2 接口的定义,【例10.3】以下是接口DataSeries的另一个版本,其中添加了返回第i个元素的只读索引。 using System; public interface DataSeries /接口 int Next get; set; /接口的一个属性 int thisint index /接口的一个索引,一个只读索引 get; /返回数列中的指定数字 class MyThree: DataSeries /实现接口DataSeries int x; public My

13、Three()x=0; /构造函数 public int Next /接口属性的实现。获取或设置值 getx+=3; return x; setx=value; public int thisint index /实现索引 get x=0; for(int i=0; iindex; i+) x+=3; return x; ,10.1.2 接口的定义, class App /应用类 public static void Main() MyThree ob=new MyThree (); for (int i=0; i3; i+) /通过属性访问接口 Console.WriteLine(Next

14、value is + ob.Next); Console.WriteLine(Starting at 100); ob.Next=100; for (int i=0; i3; i+) /通过属性访问接口 Console.WriteLine(Next value is + ob.Next); Console.WriteLine(Resetting to 0); ob.Next=0; for (int i=0; i3; i+) /通过索引访问接口 Console.WriteLine(Next value is + ob.Next); ,10.1.2 接口的定义,程序输出结果如下: Next val

15、ue is 3 Next value is 6 Next value is 9 Starting at 100 Next value is 103 Next value is 106 Next value is 109 Resetting to 0 Next value is 3 Next value is 6 Next value is 9,10.1.2 接口的定义,(4)接口的事件成员声明有关“事件”在本章的最后一节介绍,本处只给出接口事件的声明格式: 代码属性 new event 事件代理名 事件名; 事件声明中的代码属性和new修饰符的用法和作用,与接口的方法成员和属性成员的声明含义完

16、全一样。 例如: Interface IA /其他成员的定义 event Click MyEvent; ,10.1.3 接口的实现与使用,以上我们只是定义了一个接口,而在接口中声明的方法、属性、索引或事件的真正实现是由类来完成的。所以说,一旦定义了接口,一个或更多的类就可以以不同的方式来实现该接口中的功能,并且每个类必须实现该接口中所定义的所有方法、属性、索引或事件。即一个接口可以由多个类来实现,而在一个类中也可以实现一个或多个接口。 实现接口的方式与继承相同,即将接口放在类名的后面,中间用冒号隔开。实现接口的语句格式: class 类名:接口名列表 /类实体 其中接口名是指该类所要实现的接口的名称。,10.1.3 接口的实现与使用,1. 一个类实现(使用)一个接口。 【例10.4】创建一个类MyThree,实现【例10.1】中定义的接口DataSeries,用于生成一系列公差为3的数列。 using System; public interface

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号