接口(Interface)

接口是把隐式公共方法属性结合起来,以封装一个特定功能的集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。声明接口在语法上与声明抽象类完全相同。但不允许提供接口中任何成员的执行方式。一个类可以支持多个接口,多个类也可以支持相同的接口。

不同的是:

1、接口不能实例化,不能有构造方法和字段;

2、不能有修饰符,比如 public、private 等;

3、不能声明虚拟的或静态的等。

4、实现接口的类就必须实现接口中的所有方法和属性;

 

1 interface IChange
2 {
3   string ChangeThing(string thing);
4 }

机器猫继承于猫,并实现 IChange 接口。实现接口的方法,注意不能加 override 修饰符。

 1 class MachineCat : Cat, IChange
 2 {
 3   public MachineCat() : base()
 4   {  }
 5 
 6   public MachineCat(string name) : base(name)
 7   {  }
 8     
 9   public string ChangeThing(string thing)
10   {
11     return base.Shout() + "变出" + thing;
12   }
13 }

客户端

 1 private void button6_Click(object sender, EventArgs e)
 2 {
 3   MachineCat  mcat = new MachineCat("叮当");
 4   StoneMonkey wukong = new StoneMonkey("孙悟空");
 5 
 6   // 声明一个接口数组,将两个类实例复制给数组
 7   IChange[] array = new IChange[2];
 8   array[0] = mcat;
 9   array[1] = wukong;
10  
11   // 利用多态性,实现不同的 ChangeThing
12   MessageBox.Show(array[0].ChangeThing("东西"));  
13   MessageBox.Show(array[1].ChangeThing("东西"));  
14 }

 抽象类和接口的区别

1、抽象类可以给出一些成员的实现,接口却不包含成员的实现;

2、抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现;

3、一个类只能继承一个抽象类,但可实现多个接口;

4、类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象;

5、如果行为要跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类;

6、从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的存在,方法如何实现还不确认,预先定义。

7、抽象类是自底而上抽象出来的,而接口是自顶向下设计出来的。

posted @ 2015-06-24 19:49  壬子木  阅读(203)  评论(0)    收藏  举报