博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

在开始讲接口之前,我需要给你明确一个观点,当然,这可能也只代表我的一家之言“接口用来定义两个对象通信的契约;抽象类用来封装一组对象的公用行为规范。”之所以先跟你明确这点是因为相对于接口和抽象类的误解、误用、争论实在太多了,每个人看起来都有道理,但其实又都被人怀疑,当然这其中也包括我。之所以这样,其实也是因为这两个知识点相识之处非常多。

如果你绝对是一个零基础的初学者,你暂时不用考虑将这两者混合起来使用,你只需要将每一种学懂就行。否则的话,你会觉得仅仅是这两个知识点就足以让你放弃学习了。

抽象类必须为所有接口成员提供实现。实现接口的抽象类可以将接口方法映射到抽象方法上。例如:

    interface I  //定义接口,关键字是interface

    {

        void M();//接口中的方法、属性、事件等都没有方法体。和抽象方法一样

    }

    abstract class C : I    //和继承类一样的语法,不同的是,可以用逗号分隔已实现多重继承

{

    //因为无法或者不想实现,于是就用映射为抽象方法,等待下一个派生类来实现。

        public abstract void M(); 

    }

    小天:等等,怎么滴一不小心,就跳到接口上来了?接口又是什么??

老田:接口(interface)其实也是一种特殊的抽象类,用 interface关键字标记,他的定义没有 class 关键字,他可以包含方法和属性和事件,但是方法也只能是抽象方法(但不需要abstract关键字),任何派生于该接口的类就必须提供执行的代码.任何接口成员前面都不能加修饰符。

 .NET基类库提供了几百个预定义的接口类型,由各种类和结构实现。例如,在第22章中我们会看到,ADO.NET附带了多个数据提供程序,允许我们和某个数据库管理系统进行交互。因此,和基于COMADO不同,在ADO.NET下我们有很多连接对象可以选择(SqlConnectionOracleConnectionOdbcConnection等)。

尽管每一个连接对象都有唯一的名字,也定义在不同的命名空间中,某些可能还在不同的程序集中,但是所有连接对象都实现了一个叫IDbConnection的公共接口:

接口简介

接口是用来定义程序之间通信的一种协议。实现接口的类或者结构要与接口的定义严格一致。有了这个协议,就可以抛开编程语言的限制(理论上)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。

接口好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引。接口变量只能索引实现该接口的类的实例。

接口可用的修饰符有 newpublicprotectedinternalprivate。但是同一声明中修饰符只能有一个,new关键字只能出现在镶套接口中,表示复写继承来的同名成员。语法如下:

//根据惯例,.NET接口类型多以大写字母I作为前缀。我们创建自己的自定义接口也应该遵循

interface接口名字

{

    void 方法1();   //无返回值

    string 方法2(); //返回string类型值

    string 属性1 { get; set; } //可读可写的属性

    string 属性2 { get; }   //只读的属性

    string 属性3 { set; }   //只写的属性

    event 委托类型 事件;//声明接口中的事件

}

接口和类一样,可以被继承和发展,但不同的是,类继承不仅说明继承也会实现继承,但是接口继承只是说明继承,通俗的说,派生类可以继承基类的方法实现,而派生接口只是继承父接口的方法说明,却没有继承父接口的实现.

本文章为天轰穿原创作品,转载请注明出处及作者。