C#接口是一个让很多初学者容易迷糊的东西,用起来好象很简单,定义接口,然后在里面定义方法, 通过继承与他的子类来完成具体的实现。但没有真正认识接口的作用的时候就觉得用接口是多此一举,当 然你这样想是绝对错误的。在软件设计中有一个非常重要的原则就是:面向接口编程,依赖与接口或抽象 层。可见接口在真正的开发中是多么的重要。
在之前C#编程利器之一:类(Class)一文里介绍了类的相关知识,本文主要介绍OO编程中的另一个重要 知识点--接口。在某种程度上说,接口也是类,一种特殊的类或抽象类。 更准确说接口只包含方法、委 托或事件的签名。方法的实现是在实现接口的类中完成的[MSDN]。
一、接口的定义
如上MSDN上对接口的定义,接口只包含方法、委托或事件的签名。这句话用更通俗点的解释便是,接 口只是负责完成定义的操作,而不去实现具体的细节。如下面的IPlayer接口,它是一个玩游戏的接口, 里面只是定义了相应的方法,而不带方法的具体实现,代码如下:
1/**//// <summary>
2/// 玩游戏接口
3/// </summary>
4public interface IPlayer
5{
6 /**//// <summary>
7 /// 获取玩家的名字
8 /// </summary>
9 /// <returns>玩家的名字</returns>
10 string GetName();
11
12 /**//// <summary>
13 /// 由Player决定出什么手势
14 /// </summary>
15 /// <returns>本接口定义的三个常量之一</returns>
16 string Show();
17}
以上就是一个典型的接口的定义。定义了一个名为IPlayer的接口,内部定义了两个方法GetName和 Show。除了在接口里定义方法以外,我们还可以定义属性、索引及事件等,详细请查看MSDN上的定义或是 相关书籍,这里以属性为例简单介绍下,在接口里只能定义不实现,具体的实现是交给其子类去完成的, 那么属性应该怎么定义呢?
通常我们定义属性如下:
1/**//// <summary>
2/// 定义_Name属性,并提供get;set属性访问器
3/// </summary>
4private string _Name;
5public string Name
6{
7 get { return _Name; }
8 set { _Name = value; }
9}