全面剖析C#接口编程教程4——之实现接口 (2)

全面剖析C#接口编程教程4——之实现接口 (2)

ID:41032812

大小:45.50 KB

页数:6页

时间:2019-08-14

全面剖析C#接口编程教程4——之实现接口 (2)_第1页
全面剖析C#接口编程教程4——之实现接口 (2)_第2页
全面剖析C#接口编程教程4——之实现接口 (2)_第3页
全面剖析C#接口编程教程4——之实现接口 (2)_第4页
全面剖析C#接口编程教程4——之实现接口 (2)_第5页
资源描述:

《全面剖析C#接口编程教程4——之实现接口 (2)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、全面剖析C#接口编程教程4——之实现接口(2)2009-04-1315:09重新实现接口我们已经介绍过,派生类可以对基类中已经定义的成员方法进行重载。类似的概念引入到类对接口的实现中来,叫做接口的重实现(re-implementation)。继承了接口实现的类可以对接口进行重实现。这个接口要求是在类定义的基类列表中出现过的。对接口的重实现也必须严格地遵守首次实现接口的规则,派生的接口映射不会对为接口的重实现所建立的接口映射产生任何影响。下面的代码给出了接口重实现的例子:interfaceIControl{v

2、oidPaint();classControl:IControlvoidIControl.Paint(){…}classMyControl:Control,IControlpublicvoidPaint(){}}实际上就是:Control把IControl.Paint映射到了Control.IControl.Paint上,但这并不影响在MyControl中的重实现。在MyControl中的重实现中,IControl.Paint被映射到MyControl.Paint之上。在接口的重实现时,继承而来的公有成员定

3、义和继承而来的显式接口成员的定义参与到接口映射的过程。usingSystem;interfaceIMethods{voidF();voidG();voidH();voidI();}classBase:IMethods{voidIMethods.F(){}voidIMethods.G(){}publicvoidH(){}publicvoidI(){}}classDerived:Base,IMethods{publicvoidF(){}voidIMethods.H(){}}这里,接口IMethods在Deriv

4、ed中的实现把接口方法映射到了Derived.F,Base.IMethods.G,Derived.IMethods.H,还有Base.I。前面我们说过,类在实现一个接口时,同时隐式地实现了该接口的所有父接口。同样,类在重实现一个接口时同时,隐式地重实现了该接口的所有父接口。usingSystem;interfaceIBase{voidF();}interfaceIDerived:IBase{voidG();}classC:IDerived{voidIBase.F(){//对F进行实现的代码…}voidIDe

5、rived.G(){//对G进行实现的代码…}}classD:C,IDerived{publicvoidF(){//对F进行实现的代码…}publicvoidG(){//对G进行实现的代码…}}这里,对IDerived的重实现也同样实现了对IBase的重实现,把IBase.F映射到了D.F。映射接口类必须为在基类表中列出的所有接口的成员提供具体的实现。在类中定位接口成员的实现称之为接口映射(interfacemapping)。映射,数学上表示一一对应的函数关系。接口映射的含义也是一样,接口通过类来实现,那么

6、对于在接口中定义的每一个成员,都应该对应着类的一个成员来为它提供具体的实现。类的成员及其所映射的接口成员之间必须满足下列条件:·如果A和B都是成员方法,那么A和B的名称、类型、形参表(包括参数个数和每一个参数的类型)都应该是一致的。·如果A和B都是属性,那么A和B的名称、类型应当一致,而且A和B的访问器也是类似的。但如果A不是显式接口成员执行体,A允许增加自己的访问器。·如果A和B都是时间那么A和B的名称、类型应当一致。·如果A和B都是索引指示器,那么A和B的类型、形参表(包括参数个数和每一个参数的类型)应

7、当一致。而且A和B的访问器也是类似的。但如果A不是显式接口成员执行体,A允许增加自己的访问器。那么,对于一个接口成员,怎样确定由哪一个类的成员来实现呢?即一个接口成员映射的是哪一个类的成员?在这里,我们叙述一下接口映射的过程。假设类C实现了一个接口IInterface,Member是接口IInterface中的一个成员,在定位由谁来实现接口成员Member,即Member的映射过程是这样的:1、如果C中存在着一个显式接口成员执行体,该执行体与接口IInterface及其成员Member相对应,则由它来实现M

8、ember成员。2、如果条件(1)不满足,且C中存在着一个非静态的公有成员,该成员与接口成员Member相对应,则由它来实现Member成员。3、如果上述条件仍不满足,则在类C定义的基类列表中寻找一个C的基类D,用D来代替C。4、重复步骤1-3,遍历C的所有直接基类和非直接基类,直到找到一个满足条件的类的成员。5、如果仍然没有找到,则报告错误。下面是一个调用基类方法来实现接口成员的例子。类Class2实现了接口I

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。