何为接口?
想想现实中的接口,电脑有好多插口,可以充电,可以上网,可以扩展键盘鼠标等等,每一个插口都是一个独立的功能,互不影响,你的电脑没鼠标,但是任然可以充电。每个插口对于用户来说只能看到插口的形状,插口内部的线路不可见。
程序中的接口也是如此。类似于抽象类,在其中只写方法头或属性头,不实现具体内容。但是却可以多继承。
任然使用之前抽象类的例子,我现在想要扩充一个周长功能,椭圆和圆都有周长,但是我为了程序安全,不改变原有类的代码,如何实现呢?
我们来使用接口实现。
代码如下:
- 关键字:interface
- 命名建议:接口名最好以I开头
interface IPerimeter//周长接口
{
double Perimeter
{
get;
}
}
class Ellipse2 : Ellipse, IPerimeter
{
public double Perimeter
{
get
{
return Math.PI * (SemiMajorAxis + SemiMinorAxis);
}
}
}
class Circle2 : Circle, IPerimeter
{
public double Perimeter
{
get
{
return 2 * Math.PI * Radius;
}
}
}
class Program
{
static void Main(string[] args)
{
Circle2 circle = new Circle2();
circle.Radius = 1;
Ellipse2 ellipse = new Ellipse2();
ellipse.SemiMajorAxis = 1;
ellipse.SemiMinorAxis = 2;
Console.WriteLine("椭圆的周长:{0}\n圆的周长:{1}", ellipse.Perimeter, circle.Perimeter);
}
}
- 可以看出“版本2的圆和椭圆”拥有之前圆和椭圆的全部功能,并有周长新功能。
- 并没用改变之前圆和椭圆类的代码,“版本2的圆和椭圆”直接继承对应的类和周长接口。
运行结果
- 继承接口的类必须实现对应的属性或方法
- 在实现的方法和属性之前无需加 override
- 接口之间可以多继承