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#中的接口相关推荐

  1. 类与接口(三)java中的接口与嵌套接口

    ###一.接口 ##1. 接口简介 接口: 是java的一种抽象类型,是抽象方法的集合.接口比抽象类更加抽象的抽象类型. 接口语法: [修饰符] [abstract] interface 接口名 [e ...

  2. 【转】Postman系列三:Postman中post接口实战(上传文件、json请求)

    一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是: 1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据: 2.Get安全性比Pos ...

  3. ASP.NET程序中常用的三十三种代码(转载)

    asp.net程序中最常用的三十三种编程代码,为初学者多多积累经验,为高手们归纳总结,看了觉得很有价值~,大家不妨参考下! 1. 打开新的窗口并传送参数: 传送参数: response.write(& ...

  4. 三十三、Java集合中的LinkedList

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  5. ASP.NET 程序中常用的三十三种代码(1)

    ASP.NET 程序中常用的三十三种代码(1) 1. 打开新的窗口并传送参数: 传送参数: response.write("<script>window.open('*.ASPx ...

  6. Java中实现接口的三种方式您造吗?

    本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...

  7. 33.深度解密三十三:微信搜一搜中各频道的信息来源及相关规则讲解

    网络营销推广技术.技巧深度解密(三十三)指南: 1.本文档适合零基础以及互联网营销推广工作者,主要讲解微信搜一搜相关频道规则的问题. 2.原创版权文档,任何抄袭或者全部.部分模仿都是侵权行为. 3.敬 ...

  8. axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  9. java集合课程,I学霸官方免费课程三十三:Java集合框架之Map集合

    I学霸官方免费教程三十三:Java集合框架之Map集合 Map接口 Map集合采用键值对(key-value)的方式存储数据,其中键不可以重复.值可以重复. 常用类有HashMap.TreeMap和P ...

  10. 【Visual C++】游戏开发笔记三十三 浅墨DirectX提高班之二 化腐朽为神奇:DirectX初始化四步曲

    这篇文章里,我们将迈出精通DirectX的第一步,先了解典型Direct3D程序的书写流程,然后学习COM接口的对象的一些思想,然后按照"四步曲"的思路,系统地学习DirectX的 ...

最新文章

  1. PaddleOCR转ONNX
  2. 个人喜欢的关于模式识别、机器学习、推荐系统、图像特征等方面个人主页及博客
  3. B - Fibonacci Again
  4. MFC中的模态对话框与非模态对话框
  5. SQLServer查找已知数相邻前后数
  6. 05-简单的输入输出
  7. 应用安全-软件安全-漏洞CVE整理
  8. idea搭建maven工程
  9. Ubuntu16.04安装caffe教程(同时安装tensorflow与Pytorch)
  10. 钢构件建筑材料英国UKCA认证—EN 13381-4
  11. 国产操作系统(1)UOS安装QT
  12. 五本最有内容的电子杂志
  13. Ubuntu 18.04 究极美化教程
  14. 第十三首歌曲《翱翔的骄鹰》
  15. C++(基础) 每日一题 4.编写一个函数print 打印一个学生的成绩数组,该数组中有5个学生的数据,每个学生的数据包括num,name,scor[3]3门课的成绩。
  16. flume1.9学习笔记
  17. 浅析时间序列用户生命周期的聚类方法
  18. C#验证身份证是否有效
  19. 【电力电子技术】CURRENT DOUBLER 倍流整流电路
  20. html5的基本工作原理,HTML5基础开发教程

热门文章

  1. dizcuz手机API-mobile
  2. android数据线接口定义,制作Android手机可连接普通键盘的数据转接线
  3. 泳池马赛克让你徜徉在在海洋般的湛蓝与天际之间
  4. 这几道tomcat面试题,最后两道难倒我了
  5. floyed算法、dijkstra算法、SPFA算法
  6. 如何批量修改多个文件的后缀名!
  7. Java 并发编程之美:并发编程高级篇之一
  8. 端口映射、SNAT(源网络地址转换)
  9. Jetson Nano 开机程序自启动
  10. 2019团体程序设计天梯赛L1 L1-1 PTA使我精神焕发L1-2 6翻了L1-3 敲笨钟L1-4 心理阴影面积L1-5 新胖子公式L1-6 幸运彩票L1-7 吃鱼还是吃肉