1.接口的定义
接口(interface)定义为一个约定,实现接口的类或结构必须遵守约
定。简单的说,接口是类之间交互时遵守的一个协议。接口是独立于类的一
个定义,定义了类之间交互的标准。
单实现继承是指一个类型只能有一个基类型 。多接口继承是指一个类型
可以继承多个接口,而接口是类之间相互交互的一个抽象,把类之间需要交
互的内容抽象出来定义成接口,可以更好的控制类之间的逻辑交互,可见,
接口内容的抽象好坏关系到整个程序的逻辑质量,另外,右以在任何时候通
过开发附加接口的实现来添加新的功能,所以。
接口只包含成员定义,不包含成员实现。接口不会继承自任何的
System.Object派生类型。接口仅仅是一个包含着一组虚方法的抽象类型,成
员的实现需要在继承的类或结构中实现。接口的成员包括静态方法,索引器
,常数,事件以及静态构造器等,不包含任何实例字段或实例构造器,所以
不能实例化一个接口。
实现接口的类型必须严格按其定义来实现接口的每个成员,接口本身一
旦被发布就不能更改,对已发布的接口进行更改会破坏现有的代码。
根据约定,接口类型的名称要加一个大写的字母I前缀,接口定义允许使
用修饰符,例如:public 、protected、internal及private等,这和类与结
构的定义一样,大部分情况下使用public
一 .net框架中常用的接口简单介绍
(1)IComparable接口 定义通用的比较方法。由类型使用的
IComparable接口提供了一种比较多个对象的标准方式。如果一个类要实现与
其它对象的比较则必须实现IComparable接口。
(2)IEnumerable接口
接口公开枚举数,该枚举数支持在集合上进行简单迭代。此接口可由支持
迭代内容对象的类实现。
(3)IEnumerator接口
支持在集合上进行简单迭代。是所有枚举数的基接口。枚举数只允许读取集
合中的数据。枚举数无法用于修改基础集合。
(4)ICollection接口
ICollection接口定义所有集合的大小,枚举数和同步方法. ICollection接
口是System.Collections命名空间中类的基接口。
(5)IDictionary接口
此接口是基于ICollection接口的更专用的接口,IDictionary实现是键/值对
的集合,如Hashtable类.
(6) IList接口
此接口实现是可被排序且可按照索引访问其成员的值的集合。如ArrayList.
2.接口与抽象类
抽象类(Abstract Class)和接口在定义与功能上有很多相似的地方
,在程序中选择使用抽象类还是接口需要比较抽象类和接口之间的具体差别
。
抽象类是一种不能实例化而必须从中继承的类,抽象类可以提供实现,
也可以不提供实现。子类只能从一个抽象类继承。抽象类应主要用于关系密
切的对象。如果要设计大的功能单元或创建组件的多个版本,则使用抽象类
。
接口是完全抽象的成员集合,不提供实现。类或者结构可以继承多个接
口。接口最适合为不相关的类提供通用功能,如果需要接口的新版本,必须
创建一个全新的接口。
3.接口的实现
接口的实现分为隐式实现和显式实现 。如果类或者结构要实现的是单个
接口,可以使用隐式实现。如果类或者结构继承了多个接口,那么接口中相
同名称成员就要显式实现。显式实现是通过使用接口的完全限定名来实现接
口成员的。
public interface IBook
{
void ShowBook();
string GetTitle();
int GetPages();
void SetPages(int pages);
}
public class NewBook : IBook
{
public string title;
public int pages;
public string author;
public NewBook(string title, string author, int pages)
{
this.title = title;
this.author = author;
this.pages = pages;
}
public string GetTitle()
{
return title;
}
public int GetPages()
{
return pages;
}
public void SetPages(int pages)
{
this.pages = pages;
}
public void ShowBook()
{
Console.WriteLine("标题:{0}", title);
Console.WriteLine("作者:{0}", author);
Console.WriteLine("Pages:{0}", pages);
}
}
static void Main()
{
NewBook myNovel = new NewBook(
"程序员必读", "小胡", 888);
myNovel.ShowBook();
Console.ReadKey();
}
|
|