《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 页 - - - - - - - - -