在C#的开发中,接口是非常重要也非常好用的。可是很多时候很多人都不是很了解接口的做用,以及该如何使用。下面我们就来理解接口的作用,并看看如何使用吧。
假设我们公司有两种程序员:VB程序员,指的是用VB写程序的程序员,用clsVBProgramer这个类表示;Delphi程序员指的是用 Delphi写程序的程序员,用clsDelphiProgramer这个类来表示。 每个类都有一个WriteCode()方法。定义如下:

  1. class clsVBProgramer()
  2. {
  3. WriteCode()
  4. {
  5. //用VB语言写代码;
  6. }
  7. }
  8. class clsDelphiProgramer()
  9. {
  10. WriteCode()
  11. {
  12. //用Delphi语言写代码;
  13. }
  14. }

现在公司来了一个项目,要求派某个程序员写一个程序。

  1. class clsProject()
  2. {
  3. WritePrograme(clsVBProgramer programer)//用VB写代码
  4. {
  5. programer.WriteCode();
  6. }
  7. WritePrograme(clsDelphiProgramer programer)//重载方法,用Delphi写代码
  8. {
  9. programer.WriteCode();
  10. }
  11. }
  12. //在主程序中我们可以这样写:
  13. main()
  14. {
  15. clsProject proj=new  clsProject;
  16. //如果需要用VB写代码
  17. clsVBProgramer programer1=new clsVBProgramer;
  18. proj.WritePrograme(programer1);
  19. //如果需要用Delphi写代码
  20. clsDelphiProgramer programer2=new clsDelphiProgramer;
  21. proj.WritePrograme(programer2);
  22. }

但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类 clsCSharpProgramer,同时在此clsProject这个类中要再次重载WritePrograme (clsCSharpProgramer programer)方法。这下麻烦多了。如果还有C程序员,C++程序员,JAVA程序员呢。麻烦大了!

但是如果改用接口,就完全不一样了:
首先声明一个程序员接口:

  1. interface IProgramer()
  2. {
  3. WriteCode();
  4. }

然后声明两个类,并实现IProgramer接口:

  1. class clsVBProgramer():IProgramer
  2. {
  3. WriteCode()
  4. {
  5. //用VB语言写代码;
  6. }
  7. }
  8. class clsDelphiProgramer():IProgramer
  9. {
  10. WriteCode()
  11. {
  12. //用Delphi语言写代码;
  13. }
  14. }
  15. //对clsProject这个类进行一下修改:
  16. class clsProject()
  17. {
  18. WritePrograme(IProgramer programer)
  19. {
  20. programer.WriteCode();//写代码
  21. }
  22. }
  23. main()
  24. {
  25. clsProject proj=new  clsProject;
  26. IProgramer programer;
  27. //如果需要用VB写代码
  28. programer=new clsVBProgramer;
  29. proj.WritePrograme(programer);
  30. //如果需要用Delphi写代码
  31. programer=new clsDelphiProgramer;
  32. proj.WritePrograme(programer);
  33. }

如果再有C#,C,C++,JAVA这样的程序员添加进来的话,我们只需把它们相关的类加进来,然后在main()中稍做修改就OK了。扩充性特别好!像下面这样添加一个CSharp程序员添加进来:

  1. //clsProject类和IProgramer都无须改变,只需要再写一个CSharp程序员的类就可以了
  2. class clsCSharpProgramer():IProgramer //记住,要实现IProgramer接口
  3. {
  4. WriteCode()
  5. {
  6. //用CSharp语言写代码;
  7. }
  8. }
  9. //在使用的时候如下:
  10. main()
  11. {
  12. clsProject proj=new  clsProject;
  13. IProgramer programer;
  14. //如果需要用CSharp写代码
  15. programer=new clsCSharpProgramer;
  16. proj.WritePrograme(programer);
  17. }

这样我们如果把clsProject这个类封成一个组件,那么当我们的用户需要要扩充功能的时候,我们只需要在外部做很小的修改就能实现,可以说根本就用不着改动我们已经封好组件!是不是很方便,很强大!

转载于:https://www.cnblogs.com/ttlive/archive/2008/09/17/2191365.html

C#中理解接口以及接口的作用相关推荐

  1. 理解java中的两种接口

    在java 中我们常常提高接口一词.在java 中有两中接口. 第一种接口:就是指系统对外提供的所有服务,在对象中表现为public类型的方法的声明.也就是我们常常在一个类中写的public的方法了. ...

  2. 深入理解Java中的抽象类和接口

    对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用, ...

  3. 在PHP中implement什么意思,php 接口,extends,implement,implements 作用及区别收集整理

    标签: extends 是继承某个类 ,继承之后可以使用父类的方法 ,也可以重写父类的方法,继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承 implements 是 ...

  4. Java中的抽象类和接口(interface),abstract关键字的用法

    目录 抽象类 接口 抽象类 Java是一个面向对象的语言,因此类可以说是根基一般的存在,所有的方法/变量/语句都必须依附一个类才能存在,有时我们为了对一个类进行拓展,会选择继承这个类,在子类中对父类进 ...

  5. Java 中的抽象类和接口

    Java 中的抽象类和接口 1.参考资料 深入理解Java的接口和抽象类 Java抽象类与接口的区别 2.前言 有一次旁听面试的时候,听到面试官问了一句:既然 JDK8 中接口有了默认方法实现,那接口 ...

  6. 一个故事理解什么是接口回调

    接口回调 handler机制+thread 怎么理解接口回调-->接口回调就是一个通知机制 作用:1.单纯的通知 2.通知+传值 步骤: 1.定义接口,以及接口方法 2.定义接口对象 3.在某一 ...

  7. Java中的继承与接口

    继承的定义:子类继承父类的属性和行为(方法),使得子类对象可以使用父类中的方法与属性. 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下 public ...

  8. java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程

    多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1. 多态是方法的多态,不是属性的多态(多态与属性无关). 2. 多态的存在 ...

  9. C++中的抽象类以及接口的区别联系

    一.抽象类和接口 抽象类: 抽象类是特殊的类,不能被实例化(将定义了纯虚函数的类称为抽象类):除此以外,具有类的其他特性: 重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法 ...

  10. java 接口和虚构_深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

最新文章

  1. git 生成公钥,并且配置
  2. Docker 创建1个自己的Tomcat 镜像
  3. 音视频技术开发周刊 | 195
  4. Css fade()函数降低颜色变量透明度
  5. c语言不会可以学好java吗_有人说学了C语言,两天就能学会Java,两个星期就可以找工作?...
  6. JS的Touch事件们
  7. Mysql删除重复数据并解决You can't specify target table 'xx' for update in FROM clause 报错与 query interrupted报错
  8. 设置文件为源文件(和src一样)
  9. Shiro 支持三种方式的授权
  10. 微信趟过运营商的河 还得翻过几座山
  11. 国内访问英文版维基百科地址
  12. 计算机黑屏不亮,win7休眠后唤醒电脑但屏幕一直黑屏不亮的解决方法
  13. JVM调优-GC基本原理和调优关键分析
  14. excel如何用超链接直接打开文件
  15. google 浏览器同步
  16. 英文歌曲:What I Have Done(变形金刚第一部主题曲)
  17. Contact form 7插件使用介绍和常见问题解答
  18. 3D空间中射线与三角形的交叉检测算法【转】
  19. Django 页面跳转
  20. 再严重的感冒,马上就好【转】

热门文章

  1. 银行卡睡眠多久才会被注销?
  2. Windows® CE 系统中的同步机制
  3. 自学考试c语言真题,自学考试《C语言程序设计》练习题及答案
  4. python中怎么调用函数_浅谈Python中函数的定义及其调用方法
  5. Mac中AndroidStudio没有找到Plugins的问题
  6. Luogu3350 ZJOI2016 旅行者 最短路、分治
  7. 将markdown编译为HTML和PDF
  8. 【9018:1956】线段树1
  9. 设计模式之UML类图
  10. C++数组参数应用方式探讨(转)