接口(Interface)

1. 接口是一个约定,实现接口的类或者结构必须遵守该约定。也就是说,接口是类之间交互的协议。

2. 为什么要有接口

     现实生活中,把一个对象看做多个类型是很常见的,并且有用的。因为对象是什么类型,决定了这个对象有什么属性和行为(Method)。

这种一个对象看做多个类型的能力通常称为多继承(Multi-Inheritance)。但是通用语言运行时CLR支持单实现继承多接口继承

3. 单实现继承(Single Implementation Inheritance)是指一个类型只能有一个基类(Base class)。

4. 多接口继承(Multiple Interface Inheritance)是指一个类型可以继承多个接口,而接口是类之间互交的一个抽象,把类之间需要互交的内容抽象出来定义成接口,可以更好地控制类之间的逻辑交互。

5. 接口的一个重要特性

      接口只包含成员定义,不包含成员的实现。接口不会继承自任何System.Object派生类型。接口仅仅是一个包含着一组虚方法的抽象类型。不能实例化一个接口。

6. 实现接口的类必须严格按其定义来实现接口的每个成员。

7. 常见的DotNet框架中的接口:

      a. IComparable     

            定义了通用的比较方法。如果一个类要实现与其他对象比较,则必须实现IComparable接口。

      b. IEnumerable

            IEnumerable接口公开枚举数,该枚举数支持在集合上进行简单的迭代。IEnumerable接口可以由支持迭代内容对象的类实现。

      c. IEnumerator接口

            IEnumerator接口支持在集合上进行简单的迭代。是所有枚举数的及接口。枚举数只允许读取集合中的数据,无法用于修改基础集合。

      d. ICollection接口

            ICollection接口定义了所有集合的大小,枚举数和同步方法。

      e. IDictionary接口

            IDictionary接口是基于ICollection接口的更专用的接口。实现是键/值对的集合,如HashTable类。

      f. IList接口

            IList接口实现是可被排序且可按照索引访问其成员的值的集合,如ArrayList。

8. 接口与抽象类

      抽象类(Abstract Class)和接口在定义与功能上有很多相似的地方。使用哪个,需要比较抽象类和接口之间的具体差别。

      抽象类是一种不能实例化而且一定要被继承的类。抽象类可以提供实现,也可以不提供实现。同样,子类只能从一个抽象类继承。抽象类主要应用于关系密切的对象。如果要设计大的功能单元或创建组件的多个版本,则使用抽象类。

      接口完全抽象的成员集合,不提供实现。类或者结构可以继承多个接口。接口最合适为不相关的类提供通用的功能。如果要设计小而简练的功能块,则使用接口。接口一旦创建就不能修改了,如果需要接口的新版本,必须创建一个全新的接口。

9. 接口的实现

      接口的实现分为2种:隐式实现(Implicit Implementation)和显式实现(Explicit Implementation)。

      如果类或者结构要实现的是单个接口,可以使用隐式实现;

      如果类或者结构继承了多个接口,那么接口中相同名称成员就要显示实现。(显示实现是通过使用接口的完全限定名来实现接口成员的。)

 

posted on 2009-05-06 17:07  SamZhang  阅读(342)  评论(0编辑  收藏  举报