定义
接口是指定一组函数成员,而不实现他们的引用类型。
包含方法、属性、索引器和事件的声明
由类和结构实现方法(和抽象类一样)
关键字:interface 接口名称大写I开始
特点
- 引用类型
- 不能实例化接口,只能包含其成员的签名
- 既不能包含构造函数,也不能有字段
- 不允许包含运算符重载
- 不允许声明成员修饰符,成员隐式为pubilc
- 不能声明virtual
- 声明由继承该接口的类来实现,就是类实现接口,那么就要实现接口以及继承的接口所有成员
- 当一个类既继承基类,又继承接口的时候,必须基类写在前面,基类和接口用逗号隔开,一个类只能有一个基类,可以继承许多接口
- 接口可以多个接口继承,但是不能继承类
示例
interface IClimbTree
{
void ClimbTree();
}
interface ICatchMice
{
void CatchMice();
}
public class Pet
{
public void Eat()
{
Console.WriteLine("吃着真香");
}
}
public class Cat: Pet, IClimbTree, ICatchMice
{
public void ClimbTree()
{
Console.WriteLine("我会爬树");
}
public void CatchMice()
{
Console.WriteLine("我会抓老鼠");
}
}
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
cat.Eat();
cat.ClimbTree();
cat.CatchMice();
Console.ReadLine();
}
}
结果
吃着真香
我会爬树
我会抓老鼠
接口与抽象类的区别
- 接口用于规范,抽象类用于共性。
- 接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。
- 抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。
- 抽象类可以提供某些方法的部分实现,接口不可以。
- 抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。
- 在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在接口中加入新的方法,那么实现它的类就要重新编写。
- 接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。
- 接口不能包含字段、构造函数、析构函数、静态成员或常量。
接口的实现方式
显示实现
常用于实现多个接口或接口名相同,使用显示时,隐式失效
只能通过接口对象来调用
public void IClimbTree.ClimbTree()
{
Console.WriteLine("我会爬树");
}
public void ICatchMice.CatchMice()
{
Console.WriteLine("我会抓老鼠");
}
隐式实现
用于单个实现接口
可以同接口对象调用,也可以通过派生类的实例来调用
public void ClimbTree()
{
Console.WriteLine("我会爬树");
}
public void CatchMice()
{
Console.WriteLine("我会抓老鼠");
}