看了MSDN和C#入门经典,对接口的概念还是不太明白。什么是接口?接口是用来做什么的?我以前学过C++,学习C#的一些概念是主要通过对比C++来加深对它认识,可C++里好像没有接口这个概念?那么C#用接口的地方C++又是怎么实现的呢?望大家指点一二。

解决方案 »

  1.   

    接口不允许"实现继承",抽象类可以。可以参考COM相关书籍。
      

  2.   

    接口是一个标准或者规范,凡是想实现这个接口的功能都必须符合这个规范。
    举个例子:
    public interface IFly;
    飞翔是一个接口,里面定义所以飞翔必备的东西,比如最高飞行高度阿,飞行速度阿之类的属性和方法。鸟能飞,所以要实现所有飞翔接口里定义的东西。
    class Bird:IFly
    {
    //必须实现所有飞翔的属性和方法。//实现自己的属性方法
    }蜜蜂也能飞,所以它也要实现所有飞翔接口里定义的东西。
    class Bee:IFly
    {
    //必须实现所有飞翔的属性和方法。//实现自己的属性方法
    }
      

  3.   

    说的白一点。
    例如有A,B两个东西。它们相交互。但又不知道双方的规约。
    所以这时C出现了。C相当于第三方。是A,B间的桥。C可以称为接口。之要A,B都去实现这个接口。它们就可以在某种意思上进行交互。顾名思意。
      

  4.   

    抽象类和接口的区别在于,抽象类一般表示实体,而接口一般表示功能。
    举个例子:
    class person
    {
    //所有人的属性和方法,有些已经实现好了,子类不必实现。
    }
    public interface IRun
    {
    //跑步所要实现的属性和方法
    }class man : person,IRun
    {
    //重写一部分人的属性和方法。//添加男人自己的属性和方法。
    }class woman : person,IRun
    {
    //重写一部分人的属性和方法。//添加女人自己的属性和方法,比如生孩子。
    }class dog : IRun
    {
    //狗也能跑,但是因为它是狗,所以不能继承man抽象类,因为它能跑,所以它可以实现IRun接口
    }
      

  5.   

    上面打错了点........  person 忘了加 abstract
      

  6.   

    举个例子
    public interface ISpeak
    {
        void Speak();
    }public Cat:ISpeak
    {
        public override void Speak()
        {
             Say("喵~~~");
        }
    }public Dog:ISpeak
    {
        public override void Speak()
        {
             Say("汪汪!");
        }
    }public LZ:ISpeak
    {
        public override void Speak()
        {
             Say("靠!管我屁事!");
        }
    }比如有一个ArrayList,存储许多能“说话”的生物吗,
    我们就可以这样调用
    foreach(object obj in arrSpeak)
    {
        ISpeak speak = obj as ISpeak;
        speak.Speak();
    }
      

  7.   

    chieftech(【标题党总书记】) 真敬业~
      

  8.   

    ISpeak speak = obj as ISpeak;
    -----------------------------------
    这个是多态么?原来多态并不只是针对类的一个概念呀。
      

  9.   

    面试官:知道什么叫类么 
    应聘者:我这人实在,工作努力,不知道什么叫累 
    面试官:知道什么是包? 
    应聘者:我这人实在       平常不带包   也不用公司准备了 
    面试官:知道什么是接口吗? 
    应聘者:我这个人工作认真。从来不找借口偷懒 
    M:知道什么是继承么 
    Y:我是孤儿没什么可以继承的 
    M:知道什么叫对象么? 
    M:知道,不过我工作努力,上进心强,暂时还没有打算找对象。 
    M:知道多态么? 
    Y:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??
      

  10.   

    面试官:知道什么叫类么 
    应聘者:我这人实在,工作努力,不知道什么叫累 
    面试官:知道什么是包? 
    应聘者:我这人实在       平常不带包   也不用公司准备了 
    面试官:知道什么是接口吗? 
    应聘者:我这个人工作认真。从来不找借口偷懒 
    M:知道什么是继承么 
    Y:我是孤儿没什么可以继承的 
    M:知道什么叫对象么? 
    M:知道,不过我工作努力,上进心强,暂时还没有打算找对象。 
    M:知道多态么? 
    Y:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??
      

  11.   

    顶一下,看了这个帖子就基本懂了。谢谢楼上的各种比喻和总结。tmd msdn的描述真是云里雾里的。