1、Interface只是一个特殊的abstarct class,感觉就两点:一是所有方法均为abstarct method,二是只能定义static和final的修饰的成员变量。
   但它本质还是可以看作一个类啊?那何必引入interface的概念呢?2、在《C# Primer Plus》中说,多继承的主要问题是"当两个基类具有相同信号的成员函数和成员变量时怎么办"的问题。但现在C#用interface,一样存在这个问题啊?3、“abstarct method不提供实现,实现由overriding方法提供,它是非抽象类的成员”。但为什么在“继承这些接口”的类中,在覆盖接口抽象函数时,不使用override关键字呢?

解决方案 »

  1.   

    1)从编程角度来考虑,Interface 是为了更好的区分 abstarct class,因为毕竟如果是 Interface 一定就一点成员函数都没有的2)C# Primer Plus 也有说的不对的地方,要批判的接受事务,其他有接口的语言也存在你说的问题的3)我不清楚,这要问ms或其他老大了
      

  2.   

    ◎FlashElf(銘龘鶽):首先谢谢你的回答。但我对你的第2点回答不是很清楚,比如你能具体讲讲:C#的放弃使用“多继承”,而采用“接口”,这样有什么优势,又存在什么缺点吗?
      

  3.   

    接口其实是个很有用的东西,开始你不明白它真正的作用时你会觉得它是多余的,当你知道它的真实意义时就会觉得它是个好东西!!可以简单的这样说,不要与C#拉上关系,以你所知接口是一个怎么样的概念,在网上经常会听到别人说提供什么什么标准的接口之类的,可以看出接口是个不同领域之间相互沟的一个标准在C#中可以这样说,接口中只有声明,但每个继承它的类都必须实现该接口所有定义的方法等.
    现在有接口F,类A和B都继承了f,那么现在A和B之间就有了共同的部份,那就是接口F,接口在使用时是可以实例化的,例如:F f1=new A(); F f2=new B();
    接口的用处好大,你看一下.net的基本类库中也有很多的接口
    举一个例子吧,你的程序会用到很多的扩展,你可能随时会添加一个插件进去,那你的程序怎样去控制你的插件.最好的就是使用接口了,你定义一个接口,在其中加入一些控制的方法,所有的插件都必须继承这个接口,那么你的程序就可以很方便的控制每一个插件了
      

  4.   

    1、Interface只是一个特殊的abstarct class,感觉就两点:一是所有方法均为abstarct method,二是只能定义static和final的修饰的成员变量。
       但它本质还是可以看作一个类啊?那何必引入interface的概念呢?
    ===========================================================================
    首先要指出你的错误,interface 不能定义成员变量 ,不管是static or final ,只可以是属性和方法
    从语言上讲,你的第一个问题和第二个问题可以合二为一 , 如果没有interface,多重继承的二义性的问题基本无法解决,例如:
    class a{
       public void test();
    }
    class b{
       public void test();
    }
    public c:a,b{
       
    } b b1 = new c();
      c1 c1 = (c)b;
      c1.test()//调用哪一个
    如果是interface,子类必须覆盖基的所有方法,这个问题基本比较圆满的解决,
    3、“abstarct method不提供实现,实现由overriding方法提供,它是非抽象类的成员”。但为什么在“继承这些接口”的类中,在覆盖接口抽象函数时,不使用override关键字呢?
    ==================================================================================
    c# 提供override 关键字,与之对应的是new ,interface 的方法必须要实现。所以不用override  ,  new 是改写
      

  5.   

    个人觉得java的书中把接口叙述得清楚些
      

  6.   

    你的程序会用到很多的扩展,你可能随时会添加一个插件进去,那你的程序怎样去控制你的插件.最好的就是使用接口了,你定义一个接口,在其中加入一些控制的方法,所有的插件都必须继承这个接口,那么你的程序就可以很方便的控制每一个插件了
    对此我有不同看法,我感觉就扩展而言,接口不如继承,因为在接口中添加方法,你必须在所有继承该接口的类里面实现,而用继承,你就只需实现一次.
    不知道大家意见如何。
    ============================================该用class 的地方,你用interface, 该用interface的地方,你用class, 当然会觉得不合适,
    语言只是工具,关键看你怎么使用
      

  7.   

    在C++中,类的继承是多重的,在C#中类的继承只能是单继承,因为用了类的多重继承很容易令到有二义性,有可能不知道使用的是哪个类的方法,但在接口中就没有这个问题,所以接口可以多重继承,这也是C#的先进之处.
    C#是较近期的语言,它吸引各种语言的优点和缺点,它能有这些概念自然有它的好处!!