学习UML,学习c#,学习Java等等很多知识中都会涉及到接口这个概念,到底什么是接口呢?接下来就以c#为例来跟大家一起学习一下。
简介
类似于类,但是接口没有实例变量,并且没有方法体。一旦接口被定义后,多个类都能实现该接口,同时一个类可以实现多个接口,这就是多态性中的“一个接口,多个方法”的特性。
举例
在日常生活中很多地方都涉及到接口,比如电视机遥控,我们通过操作遥控来控制电视机开关或者切换频道、调节音量等等,但是我们并不知道遥控是怎么实现这些的。再比如下图所示的风扇,左边是开关按钮。按ON,风扇开始转动;按OFF,风扇停止转动。
再如下面的几个图示,都有样式不同的开关。我们通过这些开关来使其工作或者停止工作,但是我们并不了解这些开关到底是怎么控制这些电器设备的,也不清楚内部是怎么协调工作的。这些开关,在C#中被称作接口。
接口的名称和类名有相同的限制,C#约定接口名以一个大写字母“I”开始,使用关字interface来声明。
语法
<访问修饰符>interface<接口名>
{
//接口成员
}
示例
关于接口Ishape的定义实例:
publicinterface Ishape
{
int NumSides;
double GetArea();
}
实现接口
类可以通过在类型定义语句中包括冒号和接口名来说明它在实现接口。
若一个类实现多个接口,接口名前后列出,中间用逗号分开。
当一个类同时继承一个基类和实现一个接口时,基类放在最前面。
下面我们一起通过一个接口实例来学习一下接口的使用。
通过应用接口IDoor来实现对感控门Door和密码门Door2的控制操作。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test1
{
interface IDoor //创建接口
{
//接口实体
void open();
void close();
}
class Test
{
static void Main(string[] args)
{
IDoor[] door = new IDoor[10];
for (int i = 0; i < 10; i++)
{
//偶数号为感控门,奇数号为密码门
if (i % 2 == 0)
door[i] = new Door();
else
door[i] = new Door2();
door[i].close();
door[i].open();
}
Console.WriteLine("输出完成!");
}
}
public class Door2 : IDoor //类Door2将实现接口IDoor
{
private bool isPassword = false; //默认密码错误
public void open()
{
//如果密码错误,密码门将关闭
if (!isPassword)
{
Console.WriteLine("Door2的门关了");
}
}
public void close()
{
Console.WriteLine("Door2的门开了");
}
}
class Door : IDoor //类Door将实现接口IDoor
{
private bool HavePerson = false; //默认门前没人
public void open() //类实现接口定义的方法
{
if (!HavePerson)
{
Console.WriteLine("Door的门关上了");
}
}
public void close()
{
if (HavePerson)
{
Console.WriteLine("Door的门开了");
}
}
}
}
查看程序内各部分的具体内容,打开visual studio资源管理器,在命名空间处右击找到"视图"——>"查看类图",我们可以在类图关系窗口清晰的看到两个类:Door和Door2,接口IDoor以及它们自己的成员变量。
运行结果如图示:
以上这些是我对于学习接口后的理解,跟大家一起分享一下。