版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、接口的概念:接口是一种引用类型,类似于抽象类,主要用来定义一些必须实现的功能。一旦定义了一个接口,而且定义了一个实现这个接口的类,使用这些类的用户就可以完成接口定义的功能。多重继承是指一个子类可以有一个以上的直接父类,C#并不支持多重继承,而是用接口实现比多重继承更强的功能。接口的作用:(1)可以实现不同类的相同行为,不需要考虑类之间的层次关系;(2)可以指明多个类需要实现的方法;(3)可以使处于不同层次甚至互不相关的类具有相同的行为。程序员可以把用于完成特定功能的若干功能成员组织成相对独立的集合(接口),凡是需要实现这种特定功能的类都可以继承这个集合(接口)并在类内使用它。例如:String
2、类和Double类分别表示字符串和实数,它们有一个共同特点即可以与其他对象比较大小,这时就将相关方法CompareTo集合到一个Icompare接口中,而在String类和Double类中都实现了这个接口即实现了比较的功能。假设有类Airplane,Bird,Superman,这些类之间并没有继承关系也不一定处于相同的层次上,但他们可以拥有共同的方法takeoff( )、fly( )、land( )。那就可以定义一个接口Ifly,接口中有三个方法成员,上述三个类都可以继承自该接口,即他们都有相同的三个方法。Ifly:takeoff( );fly( );land( );Airplane:take
3、off( );fly( );land( );.Bird:takeoff( );fly( );land( );Superman:takeoff( );fly( );land( );Vehicle:Animal:要声明一个接口必须用到interface关键字,声明一个接口的一般形式如下: 属性 修饰符 interface 接口的名称 :基接口列表 /语句 例子:interface IShowInfo int x get; set; void ShowInfo( ); 在接口中包含的属性和方法仅仅是一个声明,在接口中不能包含它们的实现,在C#中的接口成员隐含是public,不能再加除new之外的其他
4、修饰符。接口本身可以带修饰符。声明了一个接口只是定义了一些功能,或者说定义了要完成一些功能的契约,要使用这个功能,还必须用类来实现这个接口,而且可以用一个类来实现多个接口。using System;interface INumber int x get; set; class Number:INumber private int myx; public Number(int x) myx=x; public int x /对接口中属性对接口中属性X的实现的实现 get return myx; set myx=value; class AppMain( ) private static void
5、 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: Ibase1,Ibase2 .接口由类来实现时,格式如下:class 类名: 父类,接口1,接口2,.,接口n .父类必须放在最前面,一个类如果实现了某个接口则要求在该类中能找到与该接口各个成员相对应的成员,即接口中的成员
6、在类中都必须实现(可以从父类继承过来)。类只能有一个父类但可以实现多个接口,实际上实现了多重继承。interface Ilist int Count get;set;)interface Icount void Count( int i); interface IListCount:IList,Icount class c void Test(IListCount x) x.Count(2); x.Count=1;程序出错,Count不明确;此时可以通过强制类型转换来明确地指定。 (Ilist)x).Count=1;(ICount)x).Count(2);using System;interf
7、ace ITest void test1(); void test2( );在接口的实现中,还有一种实现方式叫做显式接口成员实现。意思就是在实现一个接口成员的时候,要使用完全限定名,即要求 同时使用接口的名称和接口成员的名称。使用显式接口成员实现的成员不能通过类的完全限定名访问而只能用接口的实例来访问。class Test:ITest void ITest.test1( ) /显式方式实现方法 Console.WriteLine(“” ); public void test2( ) /普通方式实现方法 Console.WriteLine(“”);class AppMain( ) public
8、static void Main( ) Test t=new Test( ); /生成一个Test类的实例 ITest it=t; /生成一个接口的实例 it.test1( ); /用接口的实例来调用方法test1 t.test2( ); /用实现类的实例方法来调用test2 string str=Console.ReadLine( ); 接口映射就是查找接口的成员到底是在类的什么地方实现的,一般而言查找的过程如下:(1)要在C中查找I.X实现,如果C中已经包含了和I.X 相匹配的显式接口成员实现,就可以找到。(2)如果没有匹配的显式接口成员实现,那么查找C中所有的非静态公共成员,如果找到和I
9、.X匹配的,也可以找到。(3)如果在前两步没有找到,就在C的基类中继续重复以上的查找,直到找到为止,如果没有找到就会出错。例一、interface ITest object test( );class c:ITest objest ITest.test( ) . public objest test( ) .显式接口成员实现具有最高优先级,所以c的ITest.test将成为接口中test方法的实现。例二、interface IControl void Print( );interface IForm void Print( );class Page:IControl,IForm public
10、void Print( ) . 两个接口的Print方法都被映射到类Page的Print了。如果在一个类中实现了接口,那么这个类的派生类就可以继承这个接口的实现。可以在派生类中隐藏基类中的实现,但并不能改变基类中的实现向接口的映射关系。指代又可称为代理或委托,作用相当于C中的函数指针,即一个指代对应于一个方法。基本形式:属性 修饰符 delegate 返回类型 指代名称(形式参数列表)如:delegate void Mydelegate(int i);声明了一个指代,返回类型为空,参数类型为int delegate void Mydelegate(int i);class AppMain( )
11、 public static void Main( ) Mydelegate md=new Mydelegate(DelegatePara); /将指代对应方法DelegatePara( ) md(21);/md已经成为方法DelegatePara的指代 CallDelegate(md); / 将指代md作为方法的参数 public static void DelegatePara(int i) Console.WriteLine(“0”,i); public static void CallDelegate(Mydelegate a) a(21);using System;delegate
12、void Mydelegate( );public class Myclass public void Method1( ) Console.WriteLine(“方法一”); public void Method2( ) Console.WriteLine(“方法二”); public class Mainclass static void Main( ) Myclass p=new Myclass( ); Mydelegate d=new Mydelegate(p.Method1); d( ); d=new Mydelegate(p.method2); d( ); using System
13、;public class AddFunc public static void Add( int f,int s) int result=f+s;public class UseAdd protected int first; protected int second; public delegate void Mydelegate(int first ,int second); public Mydelegate ma;public UseAdd(int f,int s) this.first=f; this.second=s;public void Invoke( ) if(ma!=nu
14、ll) ma(first,second); public class AppMain( ) static void Main( ) /生成一个类实例 UseAdd p=new UseAdd(12,15);/生成一个指代实例,对应于AddFunc.Add方法 p.ma=new UseAdd.MyDelegate(AddFunc.Add);/调用指代方法 p.Invoke( ); 在该例中的指代实现是在该例中的指代实现是“+”的运算。的运算。using System;delegate void Mydelegate(string s);class Myclass public static voi
15、d First(string s) Console.WriteLine(“First 0”,s); public staitc void Second(string s)Console.WriteLine(“Second 0”,s); public static void Third(string s)Console.WriteLine(“Third 0”,s);public static void Main( ) Mydelegate a,b,c,d; a=new Mydelegate(First); b=new Mydelegate(Second); c=new Mydelegate(Th
16、ird); d=a+b+c; a(“beijing”); b(“shanghai”); c(“hangzhou”); d(“chongqing”); 事件是在指代的基础上实现的一种通知机制,比如一个按纽的双击就是一个事件,这个事件的发生可以通知相关的程序进行处理。事件的工作过程为:关心某个事件的对象向能发出事件的对象进行事件处理程序的注册;当事件发生时,会调用所有注册的事件处理程序。事件处理程序要用指代来表示,事件就是指代实例。声明一个事件的方式:修饰符 event 指代类型名 事件名如: public delegate void Mydelegate( ); event Mydelegate
17、 MyEvent;事件注册是要告诉事件的发出者需要通知的对象。事件注册的实质就是向指代的调用列表中添加方法。事件注册要使用+=运算符。如:事件名+=指代实例; 事件名+=new 指代类名(方法名);事件注册的移除则用运算符事件名指代实例;事件名new 指代类名(方法);事件的发生,就是对事件对应的指代的调用,也就是指代的调用列表中所包含的方法的调用。格式为:事件名(参数);事件典型应用中,指代的格式为delegate void 指代名(object sender,EventArgs e);指代中的两个参数分别表示事件的发出者及事件发生时的一些参数。/声明指代public delegate void EventHandler(object sender,EventArgs e);public event EventHandler Click;/声明事件public void OnClick(EventArgs e)/调用事件 if(Click!=null) Click(this,e);using System;namespace ConsoleApplication1public class EventClasspublic delegate void Mydelegate( );public event Mydelegate MyEvent;public v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026毕业生采购面试题及答案
- 2026北影摄影面试题库及答案
- 2025年中国牛筋衬布市场调查研究报告
- 2025年中国湿度露点变送器市场调查研究报告
- 2025年中国波纹圈圈大肚纱市场调查研究报告
- 2025年中国卧式熔铝炉市场调查研究报告
- 社区护理护理服务
- 2026年GEO优化排名:三大主流系统深度测评
- 管道护理中的新技术应用
- 护理护理模拟教学应用
- 新药研发毒理学安全性评价
- 2022北京西城区初二地理一模试卷及答案
- 抗真菌药物课件
- 2023年潍坊市初中学业水平考试地理试题附答案
- 《张国庆 公共行政学 第4版 笔记和课后习题 含考研真题 详》读书笔记思维导图PPT模板下载
- 2022年上海市初中学业考试地理中考试卷真题(含答案详解)
- 皮影教学反思
- YY/T 1511-2017胶原蛋白海绵
- GB/T 7631.2-2003润滑剂、工业用油和相关产品(L类)的分类第2部分:H组(液压系统)
- 船舶吃水差解析课件
- 乙醇-水精馏浮阀塔设计化工原理课程设计
评论
0/150
提交评论