CH10-接口
CH10-接口
本章目标
- 掌握接口基础知识
- 掌握接口作为一种约定和能力的含义
- 会使用接口实现编程
本章内容
1、接口的概念
为什么要使用接口?
问题:通过OOP思想,实现防盗门的功能
分析:
- 门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能
- 将门和锁分别定义为抽象类
思考问题:防盗门可以继承门的同时又继承锁吗?如何解决此问题
1、提出需求,带领学员分析如何实现
2、按之前所学无法合理解决问题,不能让防盗门继承门的同时又继承锁,
原因两点:
第一,防盗门不是锁,不符合继承中is a的关系;
第二,C#只支持单继承。
3、说明解决办法,通过接口方可实现
什么是接口?
语法:
1
2
3
4
5
6
7[修饰符] interface 接口名 : 父接口1,父接口2, …… {
属性定义
方法定义
}
class 类名 : 父类名,接口1,接口2, …… {
}示例:
1
2
3
4
5
6
7
8
9
10
11
12
13//定义USB接口
public interface UsbInterface
{
void Service ();
}
//实现类,实现接口
public class UDisk : UsbInterface
{
public void service()
{
Console.WriteLine("连接USB口,开始传输数据。");
}
}接口的特征:
接口不可以被实例化
实现类必须实现接口的所有方法
实现类可以实现多个接口
接口可以包含方法、属性、事件、索引器或这四种成员类型的任意组合
不允许声明成员上的修饰符,即使是public也不可以,因为接口成员总是公有的,也不能声明为虚拟的和静态的
演示案例:用程序描述USB接口
效果图:
实现接口三步骤:
编写接口
1
2
3
4
5
6
7public interface IUsb
{
/// <summary>
/// 提供接口服务
/// </summary>
void Service();
}经验:
通常情况下,在C#中定义接口命名以I开头,例如:IUsb
实现接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14public class UsbDisk : IUsb
{
public void Service()
{
Console.WriteLine("连接USB接口,开始传递数据....");
}
}
public class UsbFan : IUsb
{
public void Service()
{
Console.WriteLine("连接USB接口,开始吹出凉凉的风....");
}
}多态方式使用接口
1
2
3
4
5
6
7
8
9
10static void Main(string[] args)
{
IUsb usb1 = new UsbDisk();
usb1.Service();
IUsb usb2 = new UsbFan();
usb2.Service();
Console.ReadKey();
}
2、案例讲解:接口实现防盗门
分析:
- 防盗门是一个门:is-a关系,通过继承实现
- 防盗门有一个锁:锁有开锁和关锁的能力,通过接口实现
代码演示:
定义门的父类,实现开,关门功能
1
2
3
4
5public abstract class Door
{
public abstract void Open();
public abstract void Close();
}定义锁的接口,定义开锁和关锁的接口
1
2
3
4
5public interface ILock
{
void LockUp();//关锁
void OpenLock();//开锁
}创建防盗门,继承Door,实现接口ILock
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public class TheftproofDoor : Door, ILock
{
public override void Close()
{
Console.WriteLine("轻轻一拉,门关上了....");
}
public override void Open()
{
Console.WriteLine("用力一推,门打开了....");
}
public void LockUp()
{
Console.WriteLine("插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙。");
}
public void OpenLock()
{
Console.WriteLine("插进钥匙,向右旋转钥匙三圈,锁打开了,拔出钥匙。");
}
}测试类:
1
2
3
4
5
6
7
8
9
10static void Main(string[] args)
{
TheftproofDoor door = new TheftproofDoor();
door.OpenLock();
door.Open();
door.Close();
door.LockUp();
Console.ReadKey();
}演示结果 :
3、扩展防盗门门铃功能,主要是实现拍照存档
效果图如下:
添加门铃接口
1
2
3
4
5
6
7/// <summary>
/// 接口:门铃功能,按门铃实现拍照功能
/// </summary>
public interface IDoorBell
{
void TakePictures();//拍照功能
}在防盗门上实现多个接口,修改如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public class TheftproofDoor : Door, ILock,IDoorBell
{
public override void Close()
{
Console.WriteLine("轻轻一拉,门关上了....");
}
public override void Open()
{
Console.WriteLine("用力一推,门打开了....");
}
public void LockUp()
{
Console.WriteLine("插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙。");
}
public void OpenLock()
{
Console.WriteLine("插进钥匙,向右旋转钥匙三圈,锁打开了,拔出钥匙。");
}
public void TakePictures()
{
Console.WriteLine("叮咚......咔嚓,,,拍摄相片成功....");
}
}测试类:
1
2
3
4
5
6
7
8
9
10
11static void Main(string[] args)
{
TheftproofDoor door = new TheftproofDoor();
door.TakePictures();
door.OpenLock();
door.Open();
door.Close();
door.LockUp();
Console.ReadKey();
}效果如下:
本章总结
- 理解接口的概念
- 可以通过接口实现具体功能
本章作业
通过继承和接口,实现演示案例防盗门功能
使用接口实现手机功能
需求说明:
原始的手机,可以发短信,通电话。
智能手机:随着发展,手机增加了功能:音频、视频播放、拍照、上网
实现思路:
- 编写类及接口,参照以下类的结构图
- 编写测试类,让普通手机播放音频、发信息和通电话,让智能手机上网、播放视频、照相、发信息和通电话
开发打印机
需求说明:
- 墨盒:彩色、黑白
- 纸张类型:A4、B5
- 墨盒和纸张都不是打印机厂商提供的
- 打印机厂商要兼容市场上的墨盒、纸张
具体分析:
- 墨盒和纸张的规格是一种约定
- 打印机需要遵守这些约定
- 用面向接口编程的方式开发
- 制定墨盒、纸张的约定或标准
- 打印机厂商使用墨盒、纸张的标准开发打印机
- 其他厂商按照墨盒、纸张的标准生产墨盒、纸张
实现思路
定义墨盒接口InkBox和定义纸张接口Paper
定义打印机类 ,实现两个接口
组装打印机
组装一台计算机
需求说明:
- 采用面向接口编程思想组装一台计算机。
- 计算机的主要组成部分有:CPU、硬盘、内存
实现思路:
- 定义CPU的接口CPU,返回CPU品牌和主频
- 定义内存的接口EMS,返回容量
- 定义硬盘的接口HardDisk,返回容量
- 编写各组件厂商分别实现CPU、EMS、和HardDisk接口编写计算机类,组装计算机并显示相关信息
- 编写测试类运行
效果图:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 广创科技教育-Blog!
评论