在C#语言中,类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的。
一个类能同时实现多个接口,还能实现接口的同时在继承其他类,并且接口之间也可以继承。
接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同“是什么”部分,
派生类定义了语法合同“怎么做”部分。
接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。
接口使得实现接口的类或结构在形式上保持一致。
抽象类在某种程度上与接口类似,但是,它们大多只是用在只有少数方法由基类声明由派生类实现时。
接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。
抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。
多重继承的概念:
多重继承指的是一个类可以同时继承多个类。(多重继承在C++中支持,在C#和Java中不支持)
接口定义的语法形式:
其中:
接口使用interface关键字声明,它与类的声明类似。接口声明默认是public的。
通常是以I开头,再加上其他的单词构成。例如创建一个计算的接口,可命名为IComput.
接口中定义的成员与类中定义的成员类似。
接口中定义的成员必须满足以下要求。
-接口中的成员不允许使用public、private、protected、internal访问修饰符。
-接口中的成员不允许使用static、virtual、abstract、sealed修饰符。
-在接口中不能定义字段
-在接口中定义的方法不能包含方法体。
例:
定义一个接口IWorker,其中包含一个动作叫IDoWork;
接口的实现时通过继承的方式进行实现。
接口实现需要注意的地方:
-接口继承之后具有父接口的全部成员
-类继承接口之后需要实现接口的全部成员方法。否则需要将该类定义为抽象类,未实现的接口方法定义为抽象方法。
-继承时基类和接口之间,接口和接口之间以逗号分隔。
例:
using System;
interface IMyInterface
{
// 接口成员
void MethodToImplement();
}
class InterfaceImplementer : IMyInterface
{
static void Main()
{
InterfaceImplementer iImp = new InterfaceImplementer();
iImp.MethodToImplement();
}
public void MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}
InterfaceImplementer 类实现了IMyInterface接口,接口的实现与类的继承语法格式类似;
继承接口之后,需要实现接口的方法MethodToImplement(),方法名必须与接口定义的方法名一致。
2.实现接口的方式
接口的实现分为两种:显式实现接口和隐式实现接口
显式实现接口需要使用接口名作为方法名的前缀。
注意事项:
-显式实现接口时不需要指定访问修饰符。
-显式实现的接口在调用时必须使用接口对象。
比如修改学生类显式实现接口:
(2)隐式接口
隐式接口不需要使用接口名作为方法名的前缀,但需要添加访问修饰符public。
多态能使用类之间的继承关系来实现,通过多个类继承同一个接口,并实现接口中的成员也能完成多态的表示。
使用接口实现多态 需要满足以下两个条件:
-定义接口并使用类实现了接口中的成员。
-创建接口的实例指向不同的实现类对象