C# 接口作用的深入理解

原文地址:http://blog.jobbole.com/85751/

假设我们公司有两种程序员: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了。扩充性特别好!

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

时间: 2024-10-30 02:09:43

C# 接口作用的深入理解的相关文章

java-正在学习VC#,其中get和set的作用不太理解

问题描述 正在学习VC#,其中get和set的作用不太理解 正在学习VC#,其中get和set的作用不太理解,不用它们,像java那样只使用字段定义不行么 解决方案 java也有get/set方法,C#只是更进一步,简化了它们的写法.java中是类型 get属性名() { ... }void set属性名(类型 value) { ... }

【java】接口的作用|实例讲解java接口

接口作用: 解决java不能多继承,用过接口变相实现多继承. 屏蔽实现的不同的差异 接口实例 现在假如说,java想让oracle和mysql实现自己的数据源和关闭数据源,java只需要做一个接口interface出来.而oracle和mysql自己去实现这个接口即可. ok  下面先上一个组织结构,需要用到工厂模式. 总共三个包,分别是 接口包 com.rs.biz 工厂包com.rs.factory 实现类com.rs.impl 最后一个是测试类. 第二步,开始写接口DateBase.jav

接口回调怎么理解????

问题描述 接口回调怎么理解???? 接口回调要怎么理解??要怎么写,具体步骤是什么,求大神解释?? 解决方案 就是你调用了一个接口,然后那个接口又来吊你写的函数 解决方案二: 跟类的上转型对象使用一样,只是接口回调是针对接口而已,我只是渣渣,深一点的就不会了 解决方案三: 跟类的上转型对象使用一样,只是接口回调是针对接口而已,我只是渣渣,深一点的就不会了 解决方案四: 接口回调安卓开发接口回调经典案例网络请求什么是接口回调? 解决方案五: 其实和多态差不多一个道理 解决方案六: 按钮的监听事件都

农民伯伯 谈 接口 [interface]

前言      相信大家对接口是不陌生的,但是你真的理解什么是接口吗?真的能用好吗?我们口口声声说按接口编程,到底如何接口编程呢?接口编程的意义在哪呢?...对于接口的迷茫,经常在三层结构里面看到的,千篇一律的把每一个Dao都写一个接口,每个Service再写一个接口,因为他们看的例子就是这样的,网上很多例子都是这样的,这就叫按接口编程了?!心里没底,到下次自己写项目自己设计的时候再加上赶进度怕是没这么勤奋的复制粘贴了,原因还是没有明白接口到底有什么用!甚着感觉接口这玩意就像脱裤子放屁--多此一

java-数据访问层和业务逻辑层为什么要定义接口?

问题描述 数据访问层和业务逻辑层为什么要定义接口? 数据访问层可能会操作不同的数据库,可是业务逻辑层我感觉没必要吧,不管从哪个数据库都是一种逻辑判断吧?我感觉没必要写两个实现类 解决方案 首先,面向接口编程是一种常用的编程规范,使用接口有很多好处,例如便于扩展和代码维护等. 其次,DAO层使用接口,可能不同的数据库访问有不同的实现方法,这个用接口可能相对好理解一下: 而业务逻辑层用接口,是为了便于系统维护和扩展,万一哪一天整个业务流程变化了呢,那时我们只要重新一种实现,然后配置该类型的引用就可以

[转]李战大师-悟透delphi-第四章 接口

第四章          接口 前不久,有位搞软件的朋友给我出了个谜语.谜面是"相亲",让我猜一软件术语.我大约想了一分钟,猜出谜底是"面向对象".我觉得挺有趣,灵机一动想了一个谜语回敬他.谜面是"吻",也让他猜一软件术语.一分钟之后,他风趣地说:"你在面向你美丽的对象时,当然忍不住要和她接口!".我们同时哈哈大笑起来.谈笑间,似乎我们与自己的程序之间的感情又深了一层.对我们来说,软件就是生活. 第一节 接口的概念"

PHP SPL标准库之接口(Interface)详解

  这篇文章主要介绍了PHP SPL标准库之接口(Interface)详解,本文分别讲解了Coutable接口.OuterIterator接口.RecursiveIterator接口.SeekableIterator接口.SplObserver和SplSubject接口等内容,需要的朋友可以参考下 PHP SPL标准库总共有6个接口,如下: 1.Countable 2.OuterIterator 3.RecursiveIterator 4.SeekableIterator 5.SplObserv

深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解

 这篇文章主要介绍了深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解,本文讲解了DIP and JavaScript.何时依赖注入等内容,需要的朋友可以参考下     前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第5篇,依赖倒置原则LSP(The Dependency Inversion Principle ). 英文原文:http://freshbrewedcode.com/derekgreer/2012/01/2

电脑显卡接口类型知识大全

  就目前而言,显卡上面常见的输出接口是比较丰富的,如上图所示.我们所熟知的有以下几种:VGA.DVI.HDMI和DP.这四种输出接口是显卡上最常见的输出接口,VGA是大家再熟悉不过的输出接口了,但是DVI.HDMI和DP这三大新兴输出接口每一个类别又有好几种分类,同时版本也有了好几种,所以容易让初学者对这些输出接口犯糊涂,同时根据显卡档次的高低,并不是所有显卡都有以上输出接口的.下面我们就来一一为大家详解这几种接口的定义.区别差异等等,让您弄个明白. VGA接口--最常见,见得最多的显卡输出接