1. 定义
在实际生活中,经常能看到各种各样的接口,如常见的手机充电接口有三种,分别是MicroUSB插口,Type-C插口,Lightning接口。然而我们并不清楚其内部的原理,也不用清楚,我们只需要会用它就行了。
简单来说,在面向对象程序设计中,接口就是一个不能实例化,且只能拥有抽象方法的类型。在C#中,接口的声明属于类型说明,声明接口时使用interface关键字。
2. 实例
接口的基本语法:
接口修饰符 interface 接口名称 : 基接口名称列表
{
接口的成员方法、属性等;
}
定义一个IPerson接口:
public interface IPerson //声明接口
{
void Walk(); //走的方法
void Talk(); //说话的方法
}
接口不能实例化,且只能有抽象的方法。接口的实现需要通过新建一个类继承它,并实现它的抽象方法。这里创建了Worker类,继承了IPerson接口,并实现它的方法。
public class Worker : IPerson
{
public void Walk()
{
Console.WriteLine("实现接口的Walk()");
}
public void Talk()
{
Console.WriteLine("实现接口的Talk()");
}
}
接口可以创建一个引用变量,指向实现接口类的对象
IPerson person = new Worker();
3. 接口的重新实现
接口的重新实现是指基类已实现接口,其派生类再一次实现接口。这样,使用基类引用访问派生类,会实现派生类实现接口的代码。
//接口
interface II
{
void X();
void Play();
}
/类B继承接口II
class B : II
{
public void X()
{
Console.WriteLine("B:X()");
}
public void Play()
{
Console.WriteLine("B:Play()");
}
}
//类C继承B和接口II,重写了接口Play()方法
class C:B,II
{
public new void Play()
{
Console.WriteLine("C:Play()");
}
}
//main
static void Main(string[] args)
{
C c = new C();
II f = c;
f.X();//输出:B:X()
f.Play();//输出:C:Play()
}
派生类C重新实现了接口方法Play(),那么调用时将调用派生类的Play()方法。
4. 接口和抽象类
(1)接口与抽象类都不能直接实例化
(2)派生类只能继一个抽象类,实现接口的类可以实现多个接口
(3)抽象类用于关系密切的对象,侧重于is_a关系,比如老虎是动物,老虎继承动物这一抽象类。接口为不相关的类提供通用功能,侧重于Can_do。蜜蜂和蝙蝠这两个动物类均实现了Fly()接口。
(4)抽象类多定义对象的属性,接口多定义对象的行为。
5. 总结
接口的使用,能够使得代码更加精简,调用起来更加方便。熟练使用接口,并和抽象类区别,能够将多个类联系起来,这对于代码的管理是十分方便的。