日期:2014-05-20  浏览次数:21117 次

C#为什么要使用接口?使用接口的好处,举个简单的列子说明
rt

------解决方案--------------------
约束.你可以不去考虑你写的类不关心的问题而且必须使用的
------解决方案--------------------
学习,支持楼主
------解决方案--------------------
约束的好处就是我是老大,我设计制定下来的接口,你们写的继承这个接口的类都必须实现,否则编译通不过
------解决方案--------------------
search "接口"

http://topic.csdn.net/u/20090405/11/2937cf64-ef6c-4930-a04e-cd59625ba93d.html

接口只是一种契约

使用 interface 去定义某些特定的功能,为的是不要将代码写死在自定义 class、function 里,
以便在 SA / OOD / 系统开发、事后维护、功能扩充 上更有弹性。

WCF 中也是建议先用 interface 做 memeber、method 的定义,再由自定义类去实践。
亦可参考 SA / Design Patterns 的文件和书籍。 


例如返乡的火车订票系统,我们(或SA,SD) 可以先定义一个叫做「订票需求」的 interface,里面只要有一个空的「是否能订票」的函数即可。
而可能有一或多个自定义 class,分别叫做「特定班次」、「特定座位」、「特定ooxx」、… 的class,
都是「实作(implement)」这个「订票需求」interface,因此也都已有了这个「是否能订票」的函数,

而程序员,就去把这几个实现的 class 的「是否能订票」的函数去写出来,
因此在 SA 阶段,程序语言不是重点。

日后这个火车,若是订位方式改变、或座位改变、或是要加入或改变其它订票的功能和需求,
就不用再去动到「订票需求」的 interface,
只要更动实现它的 class 即可,
程序员改好某个 class 的「是否能订票」的函数之后,再 Plug-in 到系统里即可。
不会去动到 SA 和整个系统架构,这在中大型项目中尤其重要,不论是 .NET / J2EE 皆然。
亦可参考 SA 系统分析、OOD、UML 的书籍。


------解决方案--------------------
就是我定义一个接口,让实现类决定具体怎么操作
然后调用时,并不要知道实现类是怎么实现的具体操作,调用接口的方法就可以了
例子么:IDisposable接口
------解决方案--------------------
俺不说那些虚滴,俺说点实在滴

听说过转基因食品吗?为啥转基因水稻能抗病,为啥转基因水稻能提高矿物质含量!

他继承并实现了,特定功能的基因接口

听说过快速病毒检测试剂吗?为啥他能快速检测病毒,因为他只是检测了对应病毒的基因接口,试剂本身只对特定供能的基因接口起反应。


ok
当你某个类需要实现某些特定功能的片段的时候,请继承并实现这些特定片段功能的接口

当你规定我这个操作只针对某些实现了特定功能接口的对象时,请继承并实现这些特定功能的接口
------解决方案--------------------
简单说就是主板和零件的关系?
------解决方案--------------------
实际接口本身就是一些具有特定功能片段的抽象
------解决方案--------------------
接口就是一种强行的规定,你一旦继承了一个接口,那么你就必须实现接口中定义的所有。
------解决方案--------------------
面向接口编程是oop的精华所在.
------解决方案--------------------
给你个例子吧:
public interface ISave
{
 void SaveData(string data);//data当然可以是更复杂的数据
}

public class DataManager
{
 public ISave Saver{get;set;}
 public string Data{get;set;}//当然可以是更复杂的数据
}

public class TextSaver:ISave
{
 public void SaveData(string data){}//保存到文本文件
}

public class DataBaseSaver:ISave
{
 public void SaveData(string data){}//保存到数据库
}
....
public static main(..)
{
 DataManager dm=new DataManager();
 dm.data="adfqwei";
 dm.Saver=new TextSaver();
 dm.SaveData();//保存到文本文件(可以只更改TextSaver()类或实现多个达到保存为.txt,.doc,.xml等文件
 dm.Saver=new DataBaseSaver();
 dm.SaveData();//保存到数据库(可以只更改DataBaseSaver()类或实现多个更达到保存到多种数据库(access,sql等);
}