比如:
声明一个接口,里面声明一些空函数;然后再生命一个类,并实现这个接口。在调用这个类里面的函数。
为什么不直接在类里面声明方法呢?这样不是要少写一些代码么?

解决方案 »

  1.   

    接口主要还是起到规范代码、多重继承的作用,对于以后维护来说也比较好,比如你定义了一个接口的类型和名称:string Ifunction,你只要把Ifunction这个接口丢给n个开发人员,让开发人员去写接口的功能(实现),这样你就可以不用管Ifunction里面的代码怎么样,你只要最终返回Ifunction的结果就行了,就看你Ifunction这个接口用在什么地方了。当然,接口也有缺点,一旦定义了接口的类型和名称,以后要修改就非常麻烦。接口只有大型项目还有多人一起开发才觉得有大的作用,平时小项目或者单独开发感觉就像多此一举一样,不过还是要养成一个习惯,一般都要写接口,方便以后别人接手
      

  2.   

    面向接口编程是oop的精华所在
    接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类
    至少要实现哪些功能,继承它的类可以增加自己的方法.
    使用接口可以使继承它的类: 命名统一/规范,易于维护.
    提供永远的接口。 当类增加时,现有接口方法能够满足继承类中的大多数方法,没必要
    重新给新类设计一组方法,也节省了代码,提高了开发效率.
      

  3.   

    好多代码其实都在无意思的误导了一些人,如果只有一个类,那么接口就完全没有必要。
    接口是给一组有一定关系的类,来使用的。接口不是为了少写点代码,而是为了调用的时候方便一点。举一个例子,提取控件值的例子。
    一个页面里有三个控件,一个文本框,一个下拉列表框,一个复选框。
    要取值怎么写?
    textbox1.Text
    dropdownlist.SelectedValue
    check1.checked每个控件的取值的函数(属性)都不大一样,如果定义一个接口(iControl),接口里定义一个取值的函数(GetValue),然后各个控件都实现这个接口。
    那么我们的取值代码就方便多了。for (int i = 0;i<Page.Controls.count;i++)
    {
    iControl ctrl = Page.Controls[i];
    ctrl.GetValue;
    }这样不管有多少个控件,我们一个相同的循环就都搞定了。上面的代码只是一个含义,并不一定符合语法,先写的。
      

  4.   

    当然说它主要可以用于多重继承也是类似的,只不过表面看起来是另一个角度。比如我们有一个处理接口“I养马场”功能的程序,那么不论调用这些程序的时候其养马场对象实际上是自定义类型、Form、UserControl、MarshalByRefObject还是别的什么类型的子类,只要另外还有这个接口就行了。
      

  5.   

    不论什么都是从实际出发,所以肯定不能知道了接口概念就反过来滥用它。如果你定义了空洞的接口,那么使用它就成了负担,而且随便一个属性、一个方法都弄出一个借口来的话也就捧杀了接口的作用。比如空洞地搞个Value到处用,那么谁知道它到底具体起什么作用呢?一个DropdownList控件有不下5种我们关心的Value,所以只有那些直截了当地具体定义其不同属性的做法才会被人使用,而空洞地只是定一个一个Value属性则会被其它程序员抛弃。所以使用接口,从你是否是一个真正的设计人员的角度出发,而不是为了显示你知道这个概念就滥用它的。
      

  6.   

    设计接口,都是有其目的,有其用意的。.net框架的控件里面并没有GetValue的接口,为什么呢?人家做的东西要严谨,适用范围要广,这个没有问题。但是也带来了一个缺点——我们要取值的时候写的代码比较多。那么平时我们取值的时候,那要写一大堆的代码吗?
    DropdownList控件有不下5种我们关心的Value但是常用的只有两种(value、text),其中value是最最常用的。那么我们规定DropdownList实现的GetValue就是回去其选的的Item的value值 。这样去定义没有什么错,当然你可以说这么定义适用范围就小了,如果我要去的不是value,而是text的时候怎么办?万事万物都是有利有弊,有长处有短处的,就看你的需求。根据你的需求去定义接口,而不是根据和你不相干的  去定义。微软做点东西,要尽可能的全面,要尽可能的照顾到所有。但是我们呢?仁者见仁,智者见智的事情了,每个人都有自己的看法。我上面的例子,只是希望能够给lz一个提示,一个启发。我理解面向对象非常吃力,非常慢,一个原因就是网上的例子,大都是“伪代码”,什么“动物——》猫、狗”了,什么“i农场”了。这些看得我都头疼,一点都理解不了。我是希望能够看到真正的代码,能够实际意义的代码,真实场景的代码。不知道lz是不是也是这样,如果lz不是这样的话,那就算我没说好了,呵呵。