C#中理解接口以及接口的作用
假设我们公司有两种程序员:VB程序员,指的是用VB写程序的程序员,用clsVBProgramer这个类表示;Delphi程序员指的是用 Delphi写程序的程序员,用clsDelphiProgramer这个类来表示。 每个类都有一个WriteCode()方法。定义如下:
- class clsVBProgramer()
- {
- WriteCode()
- {
- //用VB语言写代码;
- }
- }
- class clsDelphiProgramer()
- {
- WriteCode()
- {
- //用Delphi语言写代码;
- }
- }
现在公司来了一个项目,要求派某个程序员写一个程序。
- class clsProject()
- {
- WritePrograme(clsVBProgramer programer)//用VB写代码
- {
- programer.WriteCode();
- }
- WritePrograme(clsDelphiProgramer programer)//重载方法,用Delphi写代码
- {
- programer.WriteCode();
- }
- }
- //在主程序中我们可以这样写:
- main()
- {
- clsProject proj=new clsProject;
- //如果需要用VB写代码
- clsVBProgramer programer1=new clsVBProgramer;
- proj.WritePrograme(programer1);
- //如果需要用Delphi写代码
- clsDelphiProgramer programer2=new clsDelphiProgramer;
- proj.WritePrograme(programer2);
- }
但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类 clsCSharpProgramer,同时在此clsProject这个类中要再次重载WritePrograme (clsCSharpProgramer programer)方法。这下麻烦多了。如果还有C程序员,C++程序员,JAVA程序员呢。麻烦大了!
但是如果改用接口,就完全不一样了:
首先声明一个程序员接口:
- interface IProgramer()
- {
- WriteCode();
- }
然后声明两个类,并实现IProgramer接口:
- class clsVBProgramer():IProgramer
- {
- WriteCode()
- {
- //用VB语言写代码;
- }
- }
- class clsDelphiProgramer():IProgramer
- {
- WriteCode()
- {
- //用Delphi语言写代码;
- }
- }
- //对clsProject这个类进行一下修改:
- class clsProject()
- {
- WritePrograme(IProgramer programer)
- {
- programer.WriteCode();//写代码
- }
- }
- main()
- {
- 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了。扩充性特别好!像下面这样添加一个CSharp程序员添加进来:
- //clsProject类和IProgramer都无须改变,只需要再写一个CSharp程序员的类就可以了
- class clsCSharpProgramer():IProgramer //记住,要实现IProgramer接口
- {
- WriteCode()
- {
- //用CSharp语言写代码;
- }
- }
- //在使用的时候如下:
- main()
- {
- clsProject proj=new clsProject;
- IProgramer programer;
- //如果需要用CSharp写代码
- programer=new clsCSharpProgramer;
- proj.WritePrograme(programer);
- }
这样我们如果把clsProject这个类封成一个组件,那么当我们的用户需要要扩充功能的时候,我们只需要在外部做很小的修改就能实现,可以说根本就用不着改动我们已经封好组件!是不是很方便,很强大!
转载于:https://www.cnblogs.com/ttlive/archive/2008/09/17/2191365.html
C#中理解接口以及接口的作用相关推荐
- 理解java中的两种接口
在java 中我们常常提高接口一词.在java 中有两中接口. 第一种接口:就是指系统对外提供的所有服务,在对象中表现为public类型的方法的声明.也就是我们常常在一个类中写的public的方法了. ...
- 深入理解Java中的抽象类和接口
对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用, ...
- 在PHP中implement什么意思,php 接口,extends,implement,implements 作用及区别收集整理
标签: extends 是继承某个类 ,继承之后可以使用父类的方法 ,也可以重写父类的方法,继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承 implements 是 ...
- Java中的抽象类和接口(interface),abstract关键字的用法
目录 抽象类 接口 抽象类 Java是一个面向对象的语言,因此类可以说是根基一般的存在,所有的方法/变量/语句都必须依附一个类才能存在,有时我们为了对一个类进行拓展,会选择继承这个类,在子类中对父类进 ...
- Java 中的抽象类和接口
Java 中的抽象类和接口 1.参考资料 深入理解Java的接口和抽象类 Java抽象类与接口的区别 2.前言 有一次旁听面试的时候,听到面试官问了一句:既然 JDK8 中接口有了默认方法实现,那接口 ...
- 一个故事理解什么是接口回调
接口回调 handler机制+thread 怎么理解接口回调-->接口回调就是一个通知机制 作用:1.单纯的通知 2.通知+传值 步骤: 1.定义接口,以及接口方法 2.定义接口对象 3.在某一 ...
- Java中的继承与接口
继承的定义:子类继承父类的属性和行为(方法),使得子类对象可以使用父类中的方法与属性. 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下 public ...
- java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程
多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1. 多态是方法的多态,不是属性的多态(多态与属性无关). 2. 多态的存在 ...
- C++中的抽象类以及接口的区别联系
一.抽象类和接口 抽象类: 抽象类是特殊的类,不能被实例化(将定义了纯虚函数的类称为抽象类):除此以外,具有类的其他特性: 重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法 ...
- java 接口和虚构_深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
最新文章
- git 生成公钥,并且配置
- Docker 创建1个自己的Tomcat 镜像
- 音视频技术开发周刊 | 195
- Css fade()函数降低颜色变量透明度
- c语言不会可以学好java吗_有人说学了C语言,两天就能学会Java,两个星期就可以找工作?...
- JS的Touch事件们
- Mysql删除重复数据并解决You can't specify target table 'xx' for update in FROM clause 报错与 query interrupted报错
- 设置文件为源文件(和src一样)
- Shiro 支持三种方式的授权
- 微信趟过运营商的河 还得翻过几座山
- 国内访问英文版维基百科地址
- 计算机黑屏不亮,win7休眠后唤醒电脑但屏幕一直黑屏不亮的解决方法
- JVM调优-GC基本原理和调优关键分析
- excel如何用超链接直接打开文件
- google 浏览器同步
- 英文歌曲:What I Have Done(变形金刚第一部主题曲)
- Contact form 7插件使用介绍和常见问题解答
- 3D空间中射线与三角形的交叉检测算法【转】
- Django 页面跳转
- 再严重的感冒,马上就好【转】