在本文的第一部分里,我们将会仔细看看类接口。我们会考察一下如何将它们同抽象基本类进行比较,以及应该在什么时候使用它们。然后,我们要讨论.NET的一些最重要的接口。最后,我们会看看如何创建一个能够实现IComparable接口的类。(正如你将看到的那样,实现IComparable就意味着这个类必须包含一个比较方法,让它根据类来给对象排序。)在今后的文章中我们还会集中讨论如何创建自定义接口。
从习惯上讲,接口的名称都以大写I开头,紧接着的一个字母也要大写。(除了IComparable之外,另一个例子是IEnumerable。)接口就像是一个抽象基础类:两者都不用详细说明实现的细节,而且两者都会被衍生类所使用。然而,类可以衍生自基础类,并且还能够实现接口——或者,事实上,实现多个接口。(相反,C#的类只能从一个基础类继承。)在这个方面,接口比类继承更加通用——而且更加有用,尽管有人对此还有疑议。
接口的实现有助于保证连续性。有关研究已经表明:使用能够实现接口的类库所编写的应用程序其失误会更少。
一组程序员(例如.NET Framework的创建者)创建了一个类库,而另一组程序员(你和我)会使用这些类,在这种情况下,接口会工作得非常好。接口的实现还是开发团队的领导者制定和发布项目规范的好方式。项目领导者编写好接口并指定类的强制实现。
正如我会在文章后面的内容里展示的那样,Visual Studio .NET开发环境本身会有助于加强接口所创建的约定。如果你试图运行项目里包含有能够实现接口的类,而且由接口指定的成员不是在类里实现的,那么你就会碰到句法错误,而包含有代码的项目既不会运行也不会被编译。