2022年2022年接口的作用 .pdf

上传人:Che****ry 文档编号:33688042 上传时间:2022-08-12 格式:PDF 页数:11 大小:170.34KB
返回 下载 相关 举报
2022年2022年接口的作用 .pdf_第1页
第1页 / 共11页
2022年2022年接口的作用 .pdf_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《2022年2022年接口的作用 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年接口的作用 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 接口的作用C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口, 里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认识到接口的作用的时候就觉得用接口是多此一举,当然你这样想那是绝对绝对错误的,比尔盖茨的微软请的员工都是比盖茨还聪明的人,他们的C#能添这样的多足吗?!关于接口的作用,网上有一位就真的深入浅出给我们做了很好理解的分析。注意:接口只包含方法、属性、事件和索引器的签名,而不提供它所定义的成员实现。/一个完整的接口声明示例interface IExample /属性string P get; set; /方法s

2、tring F(int Value); /事件event EventHandler E; /索引指示器string thisint Index get; set; 我们定义一个接口public interface IBark void Bark(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 2 再定义一个类,继承于 IBark, 并且必需实现其中的Bark() 方法public class Dog:IBark publ

3、ic Dog() public void Bark() Consol.write( 汪汪 ); 然后 ,声明 Dog 的一个实例 ,并调用 Bark() 方法Dog 旺财 =new Dog(); 旺财 .Bark(); 试想一样 ,若是想调用Bark() 方法 ,只需要在Dog()中声明这样的一个方法不就行了吗,干什么还要用接口呢 .因为接口中并没有Bark() 具体实现 .真的实现还是要在Dog() 中.那么使用接口不是多此一举吗 ? 还有人是这样说的:从接口的定义方面来说,接口其实就是类和类之间的一种协定,一种约束 .还拿上面的例子来说.所有继承了IBark 接口的类中必需实现Bark()

4、 方法 .那么从用户 (使用类的用户)的角度来说 ,如果他知道了某个类是继承于IBark 接口 ,那么他就可以放心大胆的调用Bark() 方法 ,而不用管Bark() 方法具体是如何实现的.比如 ,我们另外写了一个类. public class Cat:IBark public Cat() public void Bark() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - 3 Consol.write( 喵喵 ); 当用户用

5、到Cat 类或是 Dog 类的时候 ,知道他们继承于IBark, 那么不用管类里的具体实现,而就可以直接调用Bark() 方法 ,因为这两个类中肯定有关于Bark() 方法的具体实现. 如果我们从设计的角度来看.一个项目中用若干个类需要去编写,由于这些类比较复杂,工作量比较大 ,这样每个类就需要占用一个工作人员进行编写.比如 A 程序员去定Dog 类,B 程序员去写Cat类.这两个类本来没什么联系的,可是由于用户需要他们都实现一个关于叫 的方法 .这就要对他们进行一种约束.让他们都继承于IBark 接口 ,目的是方便统一管理.另一个是方便调用.当然了 ,不使用接口一样可以达到目的.只不过这样的

6、话,这种约束就不那么明显,如果这样类还有Duck 类等等,比较多的时候难免有人会漏掉这样方法.所以说还是通过接口更可靠一些,约束力更强一些.2、C#中接口的深入浅出: 通过学习对C#中接口的作用有了更进一步的理解,拿出来跟大家分享一下,有说的不对的地方请大家指教。假设我们公司有两种程序员:VB 程序员,指的是用VB 写程序的程序员,用clsVBProgramer这个类表示; Delphi 程序员指的是用Delphi 写程序的程序员,用clsDelphiProgramer 这个类来表示。每个类都有一个WriteCode() 方法。定义如下:class clsVBProgramer() . Wri

7、teCode() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - 4 /用 VB 语言写代码; . class clsDelphiProgramer() . WriteCode() /用 Delphi 语言写代码; . 现在公司来了一个项目,要求派某个程序员写一个程序。class clsProject() . WritePrograme(clsVBProgramer programer)/用 VB 写代码 programer.

8、WriteCode(); WritePrograme(clsDelphiProgramer programer)/重载方法,用Delphi 写代码 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - 5 programer.WriteCode(); . 在主程序中我们可以这样写:main() clsProject proj=new clsProject; /如果需要用VB 写代码clsVBProgramer programer1=

9、new clsVBProgramer; proj.WritePrograme(programer1); /如果需要用Delphi 写代码clsDelphiProgramer programer2=new clsDelphiProgramer; proj.WritePrograme(programer2); 但是如果这时公司又来了一个C#程序员, 我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类clsCSharpProgramer, 同时在此clsProject 这个类中要再次重载WritePrograme (clsCSharpProgramer programer )

10、方法。这下麻烦多了。如果还有C 程序员, C+程序员, JAVA 程序员呢。麻烦大了!但是如果改用接口,就完全不一样了:首先声明一个程序员接口:interface IProgramer() WriteCode(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - 6 然后声明两个类,并实现IProgramer 接口:class clsVBProgramer():IProgramer . WriteCode() /用 VB 语言

11、写代码; . class clsDelphiProgramer():IProgramer . WriteCode() /用 Delphi 语言写代码; . 对 clsProject 这个类进行一下修改:class clsProject() . WritePrograme(IProgramer programer) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - 7 programer.WriteCode();/ 写代码 . m

12、ain() clsProject proj=new clsProject; IProgramer programer; /如果需要用VB 写代码programer=new clsVBProgramer; proj.WritePrograme(programer); /如果需要用Delphi 写代码programer=new clsDelphiProgramer; proj.WritePrograme(programer); 如果再有C#,C,C+,JAVA 这样的程序员添加进来的话,我们只需把它们相关的类加进来,然后在 main() 中稍做修改就OK 了。扩充性特别好!另外我们如果把clsPr

13、oject 这个类封成一个组件,那么当我们的用户需要要扩充功能的时候,我们只需要在外部做很小的修改就能实现,可以说根本就用不着改动我们已经封好组件!是不是很方便,很强大!/程 ?序 三 yinterface IA int Count get; set; void F(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - 8 interface IB int Count(); void F(); /IC接 ? 口 2 从? ?I

14、A 和 a IB多 重?继 ?承Dinterface IC : IA , IB classC : IC private int count = 130; void IA.F() Console.WriteLine( interface is IA ); void IB.F() Console.WriteLine( interface is IB ); /显 ?示o?声| 明? 现?实o| IA 接 ? 口 2 中D的 ?Count属o ?性?int IA .Count get return count; set count = value; /显 ?示o?声| 明? 现?实o| IB 接 ?

15、口 2 中D的 ?Count方 ?法 ? int IB .Count() return count * count; classProgram static void Main( string args) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - 9 C tempObj = new C(); IA ia = tempObj; Console.WriteLine( Count property: 0, ia.Count);

16、 ia.F(); IB ib = tempObj; Console.WriteLine( Count function: 0, ib.Count(); ib.F(); Console.ReadKey(); /程 ?序 二tinterface Iface void speak(); interface Iface2 void eat(); classDog : Iface,Iface2 public void speak() Console.WriteLine( Dog Speak ); public void eat() Console.WriteLine( Dog Eat ); 名师资料总结

17、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - 10 classCat : Iface public void speak() Console.WriteLine( Cat Speak); classHorse : Iface public void speak() Console.WriteLine( Horse Speak); classSleep : Iface public void speak() Console.WriteLi

18、ne( Sleep Speak); classAnimal public void AnimalSpeak( Iface face) face.speak(); classProgram static void Main( string args) Animal animal = new Animal (); Iface face; face = new Dog (); animal.AnimalSpeak(face); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 11 face = new Cat(); animal.AnimalSpeak(face); face = new Horse(); animal.AnimalSpeak(face); face = new Sleep(); animal.AnimalSpeak(face); Console.ReadKey(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁