在开始讲接口之前,我需要给你明确一个观点,当然,这可能也只代表我的一家之言“接口用来定义两个对象通信的契约;抽象类用来封装一组对象的公用行为规范。”之所以先跟你明确这点是因为相对于接口和抽象类的误解、误用、争论实在太多了,每个人看起来都有道理,但其实又都被人怀疑,当然这其中也包括我。之所以这样,其实也是因为这两个知识点相识之处非常多。
如果你绝对是一个零基础的初学者,你暂时不用考虑将这两者混合起来使用,你只需要将每一种学懂就行。否则的话,你会觉得仅仅是这两个知识点就足以让你放弃学习了。
抽象类必须为所有接口成员提供实现。实现接口的抽象类可以将接口方法映射到抽象方法上。例如:
interface I //定义接口,关键字是interface { void M();//接口中的方法、属性、事件等都没有方法体。和抽象方法一样 } abstract class C : I //和继承类一样的语法,不同的是,可以用逗号分隔已实现多重继承 { //因为无法或者不想实现,于是就用映射为抽象方法,等待下一个派生类来实现。 public abstract void M(); } |
小天:等等,怎么滴一不小心,就跳到接口上来了?接口又是什么??
老田:接口(interface)其实也是一种特殊的抽象类,用 interface关键字标记,他的定义没有 class 关键字,他可以包含方法和属性和事件,但是方法也只能是抽象方法(但不需要abstract关键字),任何派生于该接口的类就必须提供执行的代码.任何接口成员前面都不能加修饰符。
.NET基类库提供了几百个预定义的接口类型,由各种类和结构实现。例如,在第22章中我们会看到,ADO.NET附带了多个数据提供程序,允许我们和某个数据库管理系统进行交互。因此,和基于COM的ADO不同,在ADO.NET下我们有很多连接对象可以选择(SqlConnection、OracleConnection、OdbcConnection等)。
尽管每一个连接对象都有唯一的名字,也定义在不同的命名空间中,某些可能还在不同的程序集中,但是所有连接对象都实现了一个叫IDbConnection的公共接口:
接口简介
接口是用来定义程序之间通信的一种协议。实现接口的类或者结构要与接口的定义严格一致。有了这个协议,就可以抛开编程语言的限制(理论上)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接口只指定实现该接口的类或接口必须提供的成员。
接口好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引。接口变量只能索引实现该接口的类的实例。
接口可用的修饰符有 new,public,protected,internal,private。但是同一声明中修饰符只能有一个,new关键字只能出现在镶套接口中,表示复写继承来的同名成员。语法如下:
//根据惯例,.NET接口类型多以大写字母“I”作为前缀。我们创建自己的自定义接口也应该遵循 interface接口名字 { void 方法1(); //无返回值 string 方法2(); //返回string类型值 string 属性1 { get; set; } //可读可写的属性 string 属性2 { get; } //只读的属性 string 属性3 { set; } //只写的属性 event 委托类型 事件;//声明接口中的事件 } |
接口和类一样,可以被继承和发展,但不同的是,类继承不仅说明继承也会实现继承,但是接口继承只是说明继承,通俗的说,派生类可以继承基类的方法实现,而派生接口只是继承父接口的方法说明,却没有继承父接口的实现.
本文章为天轰穿原创作品,转载请注明出处及作者。