黑马程序员技术交流社区

标题: C#中的接口和类有什么异同??求解释 [打印本页]

作者: 吃肉的小浣熊    时间: 2013-5-17 15:23
标题: C#中的接口和类有什么异同??求解释
C#中的接口和类有什么异同??求解释
作者: 许大虾    时间: 2013-5-17 17:19
都是引用类型.
接口实质上是功能说明书,说明有什么属性和功能(属性和方法)
接口理论上是继承者的父类,因此它可以作为实现类的引用,来封装类的复杂实现。
用接口引用 指向 new 的实例,则该引用只呈现接口中约定的属性和方法(封装)
接口可以理解为是纯抽象的类。它与类的关系好比自动洗衣机的说明书 和自动洗衣机的关系。
说明书里描述了自动加水、自动洗衣、自动脱水等功能方法,也有环保、节能、省水等特(属性)。
但是你不能用这个说明书来洗衣服吧? 你得用这些功能的实现者--洗衣机来洗衣服。
虽然是全自动洗衣机,但是它使用就很简单,1 打开盖子,放入衣服; 2 按下“开始”开关
主人完全不用关心洗衣机的内部是如何的复杂(封装)。
体现在代码上就是:
1 约定全自动洗衣机的功能,定义一个接口说明书
public Iterface IWashMac{
    void 放入衣服();
    void 开始洗衣();
}
public class Wasmac: IWashMac{
    public void 放入衣服(){
       //...
    }
    public void 开始洗衣(){
      //...
     }
}
作者: 喻畅    时间: 2013-5-17 18:49
我说简单点
   接口是负责功能的定义
   类是负责功能的具体实现
其余细节自己好好看看《C#本质论》这本书
作者: 周琪    时间: 2013-5-18 10:56
这是我写的日记,您可以看下。
接口表示一组函数成员,但不实现这些函数成员(实现代码块用分号代替)。类和结构可以实现接口
接口的声明方式如下:
interface IMyIf { void Print();}
1不可为接口中的成员添加修饰符,接口中的成员的修饰符默认是public。其实这也是有道理的,因为接口中的成员就是被用来实现的。倘若不是共有的,又想在某些地方实现接口中的成员就会受到保护级别的限制。
2接口中的成员可以是:属性,方法,索引,事件。但不可以是字段。
3要想实现接口,必须在基类列表中列出接口名,必须实现接口中的每一个成员。
4按照惯例接口名首字母应该是大写的I。
5一个接口可以继承另一个接口。这时子接口就有了所有父接口的成员。
6一个接口可以继承多个接口的同时继承一个类。在基类列表中基类必须写在第一位。


让我们来看几个例子吧
class Program
    {
        static void Main(string[] args)
        {
            IMyIf m = new Chinese();  //把类对象的引用转化为接口类型来获取指向接口的引用
            m.Print();
            IShow s = new Chinese();
            s.Show();
            Console.ReadKey();
        }
    }
interface IMyIf         //接口名首字母为大写的I
{ void Print();}        //该方法的默认修饰符为public,不可以人为修改
interface IShow
{ void Show();}
    class Person {
        public void Swimming()
{ Console.WriteLine("person can swimming");}
    }
    class Chinese : Person, IMyIf, IShow  //基类列表中把基类写在最前面
    {                    //为每个接口中的每个成员提供实现代码
        public void Print() { Console.WriteLine("从接口IMyIf中继承来的"); }
        public void Show() { Console.WriteLine("从接口IShow中继承而来的"); }
   
}

当类继承的多个接口中的成员都有相同的返回值,函数名,参数。类可以只实现一个成员。如下代码是正确的
interface IIfc1 { void Print();}
    interface IIfc2 { void Print();}
    class MyClass : IIfc1, IIfc2
    {
        public void Print() { Console.WriteLine("共同的实现"); }
     }


如果非要给每个接口中的成员有一个实现可以用显示接口;如下类所示
interface IIfc1 { void Print();}
    interface IIfc2 { void Print();}
    class MyClass : IIfc1, IIfc2
    {
    void IIfc1.Print() { Console.WriteLine("IIfc1接口的实现"); }
    void IIfc2.Print() { Console.WriteLine("IIfc2接口的实现"); }
     }

当然实现接口的类还可以从它的基类继承实现的代码,如下所示
interface IShow { void Print();}
class Person
{ public void Print()
{ Console.WriteLine("通过Person类中的方法而实现"); }
}
class Student : Person, IShow
{ }
作者: 王朋    时间: 2013-5-19 12:17
1借口中方法不能用实现,关键字interface,而且不能有字段不能被实例化
2类可以实例化,方法能够实现,也可以有字段,关键字是class
其实在解决继承的时候,一个类只能有一个父类,但是借口可以实现多个借口,简单来说借口就想本领,本领可以有多个,但是父类只能有一个,借口解决了多继承问题。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2