C#面向对象编程(四)接口和委托.ppt
《C#面向对象编程(四)接口和委托.ppt》由会员分享,可在线阅读,更多相关《C#面向对象编程(四)接口和委托.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C#面向对象编程(四)接口和委托 berry博客:n 5.4 5.4 接口接口接口的概念:接口是一种引用类型,类似于抽象类,主要用来定义一些必须实现的功能。一旦定义了一个接口,而且定义了一个实现这个接口的类,使用这些类的用户就可以完成接口定义的功能。多重继承是指一个子类可以有一个以上的直接父类,C#并不支持多重继承,而是用接口实现比多重继承更强的功能。5.4.15.4.1 接口的概念和接口的声明接口的概念和接口的声明1.1.接口的概念接口的概念接口的作用:(1)可以实现不同类的相同行为,不需要考虑类之间的层次关系;(2)可以指明多个类需要实现的方法;(3)可以使处于不同层次甚至互不相关的类具有
2、相同的行为。程序员可以把用于完成特定功能的若干功能成员组织成相对独立的集合(接口),凡是需要实现这种特定功能的类都可以继承这个集合(接口)并在类内使用它。例如:String类和Double类分别表示字符串和实数,它们有一个共同特点即可以与其他对象比较大小,这时就将相关方法CompareTo集合到一个Icompare接口中,而在String类和Double类中都实现了这个接口即实现了比较的功能。假设有类Airplane,Bird,Superman,这些类之间并没有继承关系也不一定处于相同的层次上,但他们可以拥有共同的方法takeoff()、fly()、land()。那就可以定义一个接口Ifly,
3、接口中有三个方法成员,上述三个类都可以继承自该接口,即他们都有相同的三个方法。Ifly:takeoff();fly();land();Airplane:takeoff();fly();land();.Bird:takeoff();fly();land();Superman:takeoff();fly();land();Vehicle:Animal:2.2.接口声明接口声明要声明一个接口必须用到interface关键字,声明一个接口的一般形式如下:属性 修饰符 interface 接口的名称 :基接口列表 /语句 例子:interface IShowInfo int x get;set;void
4、 ShowInfo();在接口中包含的属性和方法仅仅是一个声明,在接口中不能包含它们的实现,在C#中的接口成员隐含是public,不能再加除new之外的其他修饰符。接口本身可以带修饰符。5.4.2 5.4.2 接口的实现接口的实现声明了一个接口只是定义了一些功能,或者说定义了要完成一些功能的契约,要使用这个功能,还必须用类来实现这个接口,而且可以用一个类来实现多个接口。using System;interface INumber int x get;set;class Number:INumber private int myx;public Number(int x)myx=x;public
5、 int x /对接口中属性对接口中属性X的实现的实现 get return myx;set myx=value;接口的实现举例接口的实现举例class AppMain()private static void WriteX(INumber p)Console.WriteLine(“x=0”,p.x);public static void Main()Number p=new Number(1);WriteX(p);string str=Console.ReadLine();*接口的多重继承接口的多重继承接口可以从一个或多个父接口中继承,格式如下:interface Myinterface:I
6、base1,Ibase2.接口由类来实现时,格式如下:class 类名:父类,接口1,接口2,.,接口n.父类必须放在最前面,一个类如果实现了某个接口则要求在该类中能找到与该接口各个成员相对应的成员,即接口中的成员在类中都必须实现(可以从父类继承过来)。类只能有一个父类但可以实现多个接口,实际上实现了多重继承。多个父接口中同名现象处理多个父接口中同名现象处理interface Ilist int Count get;set;)interface Icount void Count(int i);interface IListCount:IList,Icount class c void Tes
7、t(IListCount x)x.Count(2);x.Count=1;程序出错,Count不明确;此时可以通过强制类型转换来明确地指定。(Ilist)x).Count=1;(ICount)x).Count(2);5.4.3 5.4.3 显式接口成员实现(接口映射)显式接口成员实现(接口映射)using System;interface ITest void test1();void test2();在接口的实现中,还有一种实现方式叫做显式接口成员实现。意思就是在实现一个接口成员的时候,要使用完全限定名,即要求 同时使用接口的名称和接口成员的名称。使用显式接口成员实现的成员不能通过类的完全限定
8、名访问而只能用接口的实例来访问。class Test:ITest void ITest.test1()/显式方式实现方法 Console.WriteLine(“”);public void test2()/普通方式实现方法 Console.WriteLine(“”);class AppMain()public static void Main()Test t=new Test();/生成一个Test类的实例 ITest it=t;/生成一个接口的实例 it.test1();/用接口的实例来调用方法test1 t.test2();/用实现类的实例方法来调用test2 string str=Con
9、sole.ReadLine();接口的映射接口的映射接口映射就是查找接口的成员到底是在类的什么地方实现的,一般而言查找的过程如下:(1)要在C中查找I.X实现,如果C中已经包含了和I.X 相匹配的显式接口成员实现,就可以找到。(2)如果没有匹配的显式接口成员实现,那么查找C中所有的非静态公共成员,如果找到和I.X匹配的,也可以找到。(3)如果在前两步没有找到,就在C的基类中继续重复以上的查找,直到找到为止,如果没有找到就会出错。接口映射的几个特例接口映射的几个特例例一、interface ITest object test();class c:ITest objest ITest.test()
10、.public objest test().显式接口成员实现具有最高优先级,所以c的ITest.test将成为接口中test方法的实现。例二、interface IControl void Print();interface IForm void Print();class Page:IControl,IForm public void Print().两个接口的Print方法都被映射到类Page的Print了。5.4.4 5.4.4 接口的继承接口的继承如果在一个类中实现了接口,那么这个类的派生类就可以继承这个接口的实现。可以在派生类中隐藏基类中的实现,但并不能改变基类中的实现向接口的映射关
11、系。n5.5 5.5 指代与事件指代与事件指代又可称为代理或委托,作用相当于C中的函数指针,即一个指代对应于一个方法。基本形式:属性 修饰符 delegate 返回类型 指代名称(形式参数列表)如:delegate void Mydelegate(int i);声明了一个指代,返回类型为空,参数类型为int 5.5.1 5.5.1 指代的使用方式指代的使用方式指代举例指代举例delegate void Mydelegate(int i);class AppMain()public static void Main()Mydelegate md=new Mydelegate(DelegatePa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 面向 对象 编程 接口 委托
限制150内