三十三、C#中的接口
1.接口
【含义】接口是一种能力
【语法】
public interface MyInterface()
{//该类下所有方法都是抽象方法:默认public abstract,而且不需要写void door();//其他抽象方法//其他属性
}
【特性】
①接口不可以被实例化
②实现类必须实现接口的所有方法
③实现类可以实现多个接口(C#中的多继承)
④接口中的变量都是静态常量
案例一:USB接口(面向接口编程)
【编写接口】
public interface IUsb
{/***USB接口提供服务*/void service();
}
【实现接口】
①U盘:
//U盘 实现USB接口
public class UDisk : IUsb//如果是多个接口,使用,隔开
{public void service(){Console.WriteLine("连接USB接口,开始传输数据....");}
}
②硬盘:
//硬盘
public class HardDisk : IUSB//点击实现接口,自动生成代码
{public void Service(){Console.WriteLine("硬盘传输数据中....");}
}
【使用接口】
//用接口实现多态
IUsb iusb1 = new UDisk();//派生
uDisk.service();IUSB iusb2 = new HardDisk();
iusb2.Service();Console.Read();
【执行结果】
案例二:要求实现防盗门的功能
门有:开、关 的功能,锁有:上锁、开锁的功能
将门定义为抽象类、将锁定义为接口
防盗门继承门,实现锁的接口
【分析】防盗门 is a 门;防盗门 has a 锁
【定义门类】
namespace demo16_5
{//门 抽象父类public abstract class Door{public abstract void Open();//开门public abstract void Close();//关门}
}
【定义锁接口】
namespace demo16_5
{/// <summary>/// 锁接口/// </summary>public interface ILock{void Locked();//上锁void OpenLock();//开锁}
}
【定义门铃接口】
namespace demo16_5
{/// <summary>/// 门铃接口/// </summary>public interface IDoorMusic{void PlayMusic();//门铃(播放音乐)}
}
【定义防盗门类】
using System.Media;//播放音乐namespace demo16_5
{public class TheProofDoor : Door,ILock,IDoorMusic{//将音乐放入Bin/Debug/wav文件夹下SoundPlayer sp = new SoundPlayer("wav/Lemon tree (翻唱).wav");//播放音乐的插件类 其中的地址只能放.wav类型的/// <summary>/// 关门/// </summary>public override void Close()//重写{Console.WriteLine("关闭防盗门!");}/// <summary>/// 上锁/// </summary>public void Locked(){Console.WriteLine("给防盗门上锁!");}/// <summary>/// 开门/// </summary>public override void Open()//重写{Console.WriteLine("打开防盗门!");}/// <summary>/// 上锁/// </summary>public void OpenLock(){Console.WriteLine("给防盗门开锁!");}/// <summary>/// 播放门铃音乐/// </summary>public void PlayMusic()//override{sp.Play();//播放音乐Console.WriteLine("正在播放门铃音乐!");}/// <summary>/// 关闭门铃音乐/// </summary>public void StopMusic()//override{sp.Stop();//停止播放Console.WriteLine($"停止播放门铃音乐!");}}
}
【定义卧室门类】
namespace demo16_5
{public class BedRoomDoor : Door, ILock{//关门public override void Close(){Console.WriteLine("关上卧室门!");}//上锁public void Locked(){Console.WriteLine("给卧室上锁!");}//开门public override void Open(){Console.WriteLine("打开卧室门!");}//开锁public void OpenLock(){Console.WriteLine("给卧室门开锁!");}}
}
【定义厨房门类】
namespace demo16_5
{/// <summary>/// 厨房门类/// </summary>public class CookDoor : Door{/// <summary>/// 关门/// </summary>public override void Close(){Console.WriteLine("关上厨房门!");}/// <summary>/// 开门/// </summary>public override void Open(){Console.WriteLine("打开厨房门!");}}
}
【调用】
namespace demo16_5
{class Program{static void Main(string[] args){//创建一个防盗门TheProofDoor theProofDoor1 = new TheProofDoor();Console.WriteLine("请按门铃!");string result = Console.ReadLine();if (result == "1"){theProofDoor1.PlayMusic();Console.WriteLine("等待主人来开门...等了3分钟");}//theProofDoor1.StopMusic();theProofDoor1.OpenLock();theProofDoor1.Open();Console.WriteLine("人进入房间....");theProofDoor1.Locked();theProofDoor1.Close();Console.WriteLine();创建一个卧室门//BedRoomDoor bedRoomDoor1 = new BedRoomDoor();//bedRoomDoor1.OpenLock();//bedRoomDoor1.Open();//Console.WriteLine("人进入卧室!");//bedRoomDoor1.Locked();//bedRoomDoor1.Close();//Console.WriteLine();创建一个厨房门//CookDoor cookDoor1 = new CookDoor();//cookDoor1.Open();//Console.WriteLine("人进入厨房!");//cookDoor1.Close();//Console.WriteLine();Console.Read();}}
}
【执行结果】
案例三:用C#接口实现打印机
定义墨盒接口、纸张接口
定义打印机类
实现墨盒接口、纸张接口
组装运行打印机
【定义打印机类】
namespace demo16_4
{/// <summary>/// 打印机类/// </summary>public class Printer{//预留接口/// <summary>/// 预留墨盒接口/// </summary>public IInkBox IInkBox { get; set; }/// <summary>/// 预留纸张接口/// </summary>public IPaper IPaper { get; set; }/// <summary>/// 打印内容/// </summary>public string Content { get; set; }/// <summary>/// 打印功能/// </summary>public void Print(){Console.WriteLine($"使用{this.IInkBox.Color}墨盒的打印机正在打印【{this.Content}】,纸张类型为【{this.IPaper.Size}】");}}
}
【定义墨盒接口】
namespace demo16_4
{/// <summary>/// 墨盒接口(黑色、彩色)/// </summary>public interface IInkBox{//默认public,不能写访问修饰符string Color { get; set; }//颜色}
}
【定义纸张接口】
namespace demo16_4
{/// <summary>/// 纸张接口/// </summary>public interface IPaper{string Size { get; set; }//纸张大小}
}
【定义黑色墨盒类】
namespace demo16_4
{/// <summary>/// 黑白墨盒/// </summary>public class GrayInkBox : IInkBox{public string Color { get; set; } = "黑白";}
}
【定义彩色墨盒类】
namespace demo16_4
{/// <summary>/// 彩色墨盒/// </summary>public class ColorInkBox : IInkBox{public string Color { get; set; } = "彩色";}
}
【定义A4纸类】
namespace demo16_4
{public class A4 : IPaper{public string Size { get; set; } = "A4";}
}
【定义B5纸类】
namespace demo16_4
{public class B5 : IPaper{public string Size { get; set; } = "B5";}
}
【调用打印机】
namespace demo16_4
{class Program{static void Main(string[] args){//创建一个打印机Printer printer1 = new Printer();Printer printer2 = new Printer();//对接墨盒printer1.IInkBox = new ColorInkBox();//插入彩色墨盒printer2.IInkBox = new GrayInkBox();//插入黑白墨盒//对接纸张printer1.IPaper = new A4();//插入A4纸printer2.IPaper = new B5();//插入B5纸//打印内容printer1.Content = "测试数据";printer2.Content = "学生基本信息表";//打印printer1.Print();printer2.Print();Console.Read();}}
}
【执行结果】
【好处】即插即拔,通过类来实现功能,接口中只定义了功能
【注】接口中定义字段是错误的,如:int type = 1;
三十三、C#中的接口相关推荐
- 类与接口(三)java中的接口与嵌套接口
###一.接口 ##1. 接口简介 接口: 是java的一种抽象类型,是抽象方法的集合.接口比抽象类更加抽象的抽象类型. 接口语法: [修饰符] [abstract] interface 接口名 [e ...
- 【转】Postman系列三:Postman中post接口实战(上传文件、json请求)
一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是: 1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据: 2.Get安全性比Pos ...
- ASP.NET程序中常用的三十三种代码(转载)
asp.net程序中最常用的三十三种编程代码,为初学者多多积累经验,为高手们归纳总结,看了觉得很有价值~,大家不妨参考下! 1. 打开新的窗口并传送参数: 传送参数: response.write(& ...
- 三十三、Java集合中的LinkedList
@Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...
- ASP.NET 程序中常用的三十三种代码(1)
ASP.NET 程序中常用的三十三种代码(1) 1. 打开新的窗口并传送参数: 传送参数: response.write("<script>window.open('*.ASPx ...
- Java中实现接口的三种方式您造吗?
本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...
- 33.深度解密三十三:微信搜一搜中各频道的信息来源及相关规则讲解
网络营销推广技术.技巧深度解密(三十三)指南: 1.本文档适合零基础以及互联网营销推广工作者,主要讲解微信搜一搜相关频道规则的问题. 2.原创版权文档,任何抄袭或者全部.部分模仿都是侵权行为. 3.敬 ...
- axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...
- java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合
I学霸官方免费教程三十三:Java集合框架之Map集合 Map接口 Map集合采用键值对(key-value)的方式存储数据,其中键不可以重复.值可以重复. 常用类有HashMap.TreeMap和P ...
- 【Visual C++】游戏开发笔记三十三 浅墨DirectX提高班之二 化腐朽为神奇:DirectX初始化四步曲
这篇文章里,我们将迈出精通DirectX的第一步,先了解典型Direct3D程序的书写流程,然后学习COM接口的对象的一些思想,然后按照"四步曲"的思路,系统地学习DirectX的 ...
最新文章
- PaddleOCR转ONNX
- 个人喜欢的关于模式识别、机器学习、推荐系统、图像特征等方面个人主页及博客
- B - Fibonacci Again
- MFC中的模态对话框与非模态对话框
- SQLServer查找已知数相邻前后数
- 05-简单的输入输出
- 应用安全-软件安全-漏洞CVE整理
- idea搭建maven工程
- Ubuntu16.04安装caffe教程(同时安装tensorflow与Pytorch)
- 钢构件建筑材料英国UKCA认证—EN 13381-4
- 国产操作系统(1)UOS安装QT
- 五本最有内容的电子杂志
- Ubuntu 18.04 究极美化教程
- 第十三首歌曲《翱翔的骄鹰》
- C++(基础) 每日一题 4.编写一个函数print 打印一个学生的成绩数组,该数组中有5个学生的数据,每个学生的数据包括num,name,scor[3]3门课的成绩。
- flume1.9学习笔记
- 浅析时间序列用户生命周期的聚类方法
- C#验证身份证是否有效
- 【电力电子技术】CURRENT DOUBLER 倍流整流电路
- html5的基本工作原理,HTML5基础开发教程
热门文章
- dizcuz手机API-mobile
- android数据线接口定义,制作Android手机可连接普通键盘的数据转接线
- 泳池马赛克让你徜徉在在海洋般的湛蓝与天际之间
- 这几道tomcat面试题,最后两道难倒我了
- floyed算法、dijkstra算法、SPFA算法
- 如何批量修改多个文件的后缀名!
- Java 并发编程之美:并发编程高级篇之一
- 端口映射、SNAT(源网络地址转换)
- Jetson Nano 开机程序自启动
- 2019团体程序设计天梯赛L1 L1-1	PTA使我精神焕发L1-2	6翻了L1-3	敲笨钟L1-4	心理阴影面积L1-5	新胖子公式L1-6	幸运彩票L1-7	吃鱼还是吃肉