关键字 interface 接口,很多高级面向对象编程语言都有接口这一个知识点。
这里记录一下关于接口的一些东西:接口是一种规范,
只要一个类继承了一个接口,那么这个类就必须要实现该接口中的所有成员
对于接口本身而言:
1、接口不能被实例化
2、接口中的成员不能被访问修饰符给标记,默认情况下都是public
3、接口可以去继承接口,并且可以继承多个接口,但是在继承接口的时候,不能去实现被继承接口中所定义的方法、属性、索引器以及事件
4、接口不能继承类
5、接口名字一般都是以 I 开头
6、接口中只能有方法、属性、索引器以及事件,而且只能定义,不能实现
7、接口成员会自动成为公共成员,不能包含任何访问修饰符。 成员也不能是静态成员
对于类继承接口而言:
1、如果一个类继承了接口A,而接口A又继承了接口B,那么这个类就需要实现接口A和接口B中所有的成员
2、一个类如果继承了另一个类,并且又继承了一个接口,在语法上,父类的名称要写在接口前面 比如: class A:B,IC{}
3、当实现继承的接口中的方法时,不能使用override关键字,这并不是重写该方法,而是实现该方法
4、如果基类实现接口,则从基类派生的任何类都会继承该实现,但是派生类可以重新实现接口,不用继承来的实现
5、如果一个类继承两个接口,而两个接口中有相同名称的方法,或者有相同名称的却一个是方法,一个是属性, 这个时候,这个类如果要实现这两个接口,就需要显示接口实现,也就是接口名加上点运算符,比如:interface IA
{
void print();
}
interface IB
{
void print();
}
public class Z:IA,IB
{
public void IA.print(){
Console.WriteLine("this is IA");
}
public void IB.print()
{
Console.WriteLine("this is IB");
}
}
还记得C#的里氏转换原则么?我们可以用这个原则显示实现接口成员也就是说,虽然我们不能直接创建接口的实例,但是我们可以让使用继承了接口的类来模拟创建接口的实例比如:
interface IDimensions
{
float getLength();
float getWidth();
}
class Box : IDimensions
{
float lengthInches;
float widthInches;
Box(float length, float width)
{
lengthInches = length;
widthInches = width;
}
float IDimensions.getLength()
{
return lengthInches;
}
float IDimensions.getWidth()
{
return widthInches;
}
static void Main()
{
Box box1 = new Box(30.0f, 20.0f);
IDimensions dimensions = (IDimensions)box1;//强转
//或者我们可以这样: IDimensions dimensions = new Box(30.0f,20.0f);
System.Console.WriteLine("Length: {0}", dimensions.getLength());
System.Console.WriteLine("Width: {0}", dimensions.getWidth());
}
}当然,这里只是实现了关于接口的方法,还有比如说,属性,索引器,以及事件都没实现,网上的例子很多,这里就不记录了。最后给msdn上的传送门:https://msdn.microsoft.com/zh-cn/library/ms173156.aspx ;