转:https://www.cnblogs.com/songhe123/p/9558545.html

接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。

例1:

  1. using System;
    /**
  2. 假设我们公司有两种程序员:VB程序员指的是用VB写程序的程序员,用VBpro这个类表示;C程序员指的是用C写程序的程序员,用Cpro这个类来表示。每个类都有一个WriteCode()方法。
  3. 现在公司来了一个项目,要求派某个程序员写一个程序。
  4. */
  5. namespace ConsoleApplication2
  6. {
  7. //VB程序员
  8. class VBpro
  9. {
  10. public void WriteCode()
  11. {
  12. Console.WriteLine("我用vb写代码");
  13. }
  14. }
  15. //C程序员
  16. class Cpro
  17. {
  18. public void WriteCode()
  19. {
  20. Console.WriteLine("我用c写代码");
  21. }
  22. }
  23. //编写项目类
  24. class Pro
  25. {
  26. public void WriteProgram(VBpro program)
  27. {
  28. program.WriteCode();
  29. }
  30. public void WriteProgram(Cpro program)
  31. {
  32. program.WriteCode();
  33. }
  34. }
  35. //测试
  36. class Program
  37. {
  38. static void Main(string[] args)
  39. {
  40. Pro p = new Pro();
  41. VBpro p1 = new VBpro();
  42. p.WriteProgram(p1);
  43. Cpro p2 = new Cpro();
  44. p.WriteProgram(p2);
  45. Console.ReadKey();
  46. }
  47. }
  48. }
  49.  
  50. /**
  51. 但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类C#程序员类,同时在此项目类中要再次
  52. 重载WritePrograme(C#pro programer)方法。这下麻烦多了。如果还有C++程序员,JAVA程序员呢。但是如果改用接口,就完全不一样了
  53. */
  54. namespace ConsoleApplication2
  55. {
  56. //申明一个程序员接口
  57. public interface IProgramer
  58. {
  59. void WriteCode();
  60. }
  61. //vb程序员
  62. class VBpro : IProgramer
  63. {
  64. public void WriteCode()
  65. {
  66. Console.WriteLine("我用vb写代码");
  67. }
  68. }
  69. //c程序员
  70. class Cpro : IProgramer
  71. {
  72. public void WriteCode()
  73. {
  74. Console.WriteLine("我用c写代码");
  75. }
  76. }
  77. //编写项目类
  78. class Pro
  79. {
  80. public void WriteProgram(IProgramer iprogramer)
  81. {
  82. iprogramer.WriteCode();
  83. }
  84. }
  85. //测试
  86. class Program
  87. {
  88. static void Main(string[] args)
  89. {
  90. Pro p = new Pro();
  91. VBpro p1 = new VBpro();
  92. p.WriteProgram(p1);
  93. Cpro p2 = new Cpro();
  94. p.WriteProgram(p2);
  95. Console.ReadKey();
  96. }
  97. }
  98.  
  99. }

运行结果:

例子2:

  1. using System;
  2. namespace ConsoleApplication1
  3. {
  4. public interface Ichoose
  5. {
  6. void on();
  7. void off();
  8. }
  9.  
  10. public class TV : Ichoose
  11. {
  12. private string name = "test1";
  13. public void on()
  14. {
  15. Console.WriteLine("{0}电视打开了", this.name);
  16. }
  17.  
  18. public void off()
  19. {
  20. Console.WriteLine("{0}电视关闭了", this.name);
  21. }
  22. }
  23.  
  24. public class Ice : Ichoose
  25. {
  26. private string name = "test2";
  27. public void on()
  28. {
  29. Console.WriteLine("{0}冰箱打开了", this.name);
  30. }
  31. public void off()
  32. {
  33. Console.WriteLine("{0}冰箱关闭了", this.name);
  34. }
  35. }
  36.  
  37. class Program
  38. {
  39. static void Main(string[] args)
  40. {
  41. TV tvString = new TV();
  42. tvString.on();
  43. tvString.off();
  44. Ice iceString = new Ice();
  45. iceString.on();
  46. iceString.off();
  47. Console.ReadKey();
  48. }
  49. }
  50. }

运行结果:

接口的继承

C#中接口可以多继承,接口之间可以相互继承和多继承。一个类可以同时继承一个类和多个接口,但是接口不能继承类。

  1. using System;
  2.  
  3. /**
  4. 假如你是一名在职学生,你就具有双重身份。一个身份是学生,必须完成学习任务,一个身份是职员,必须完成工作任务。进一步说,你是计算机类学生,除了学习基础课程,
  5. 还必须学习C#程序设计。现在建立一个模型,应该如何建立?
  6. 1.我们首先来定义一个学生接口,规定学生必须学习,再建立一个职员接口,规定职员必须完成工作任务。
  7. 2.计算机专业的学生,除了完成一般学习任务,还是学习C#。可以再定义一个接口,继承学生接口,规定自己的学习任务。
  8. */
  9. namespace ConsoleApplication3
  10. {
  11. //定义学生接口
  12. public interface IStudent
  13. {
  14. void study_base();
  15. }
  16. //定义职员接口
  17. public interface IEmployee
  18. {
  19. void work();
  20. }
  21. //定义计算机类学生接口
  22. public interface IIStudent : IStudent
  23. {
  24. void study_computer();
  25. }
  26.  
  27. public class Infostudent : IEmployee, IIStudent
  28. {
  29. //实现学生接口
  30. public void study_base()
  31. {
  32. Console.WriteLine("数学、语文和英语必须学好");
  33. }
  34. //实现职员接口
  35. public void work()
  36. {
  37. Console.WriteLine("工作必须完成");
  38. }
  39. //实现计算机类学生接口
  40. public void study_computer()
  41. {
  42. Console.WriteLine("计算机类的学生除学好基础课外,还要学C#");
  43. }
  44. }
  45.  
  46. //测试
  47. class Program
  48. {
  49. static void Main(string[] args)
  50. {
  51. Infostudent infostudent = new Infostudent();
  52. infostudent.study_base();
  53. infostudent.work();
  54. infostudent.study_computer();
  55. Console.ReadKey();
  56. }
  57. }
  58. }

运行结果:

总结:接口之间继承表示方法和类继承是相同的,继承的规则也是相同的,即子接口获得父接口的内容,如果有多个接口,接口之间用","隔开。


1.接口可以少写代码,把需要实现的方法交给子类,子类调用时通过传过来的不同子类(多态),实现调用当前子类的方法.

2.当类继承多口后,可以把返回的类类型转变为接口类型(即转化为父类,多态),这样就可以调用当前类中的方法了[工厂模式既是这样].

C# 接口和继承的更多相关文章

  1. Java学习笔记 07 接口、继承与多态

    一.类的继承 继承的好处 >>使整个程序架构具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性 继承的基本思想 >>基 ...

  2. 使用Json.Net处理json序列化和反序列化接口或继承类

    以前一直没有怎么关注过Newtonsoft的Json.Net这个第三方的.NET Json框架,主要是我以前在开发项目的时候大多数使用的都是.NET自带的Json序列化类JavaScriptSeria ...

  3. 线程入门之实现Runnable接口和继承Thread类

    线程的2种使用方式:实现Runnable接口和继承Thread类 1.实现Runnable接口 实现Runnable接口,必须实现run方法,也是Runnable接口中的唯一一个方法 class Ru ...

  4. C# - 接口,继承

    接口 接口是把公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合.不能像实例化一个类那样实例化接口.接口不能包含实现其成员的任何代码,而只能定义成员本身.实现过程必须在实现接口的类中完成. ...

  5. java复习(5)---接口、继承、多态

    Java作为完全面向对象语言,接口.继承和多态是三个非常重要的概念. 1.继承. (1)关键字: extends (2)子类用super()调用父类构造函数,用super().方法 调用父类的成员方法 ...

  6. java 类的继承和接口的继承

    父类 public class person { String name; int age; void eat(){ System.out.println("吃饭"); } voi ...

  7. Java进阶篇(一)——接口、继承与多态

    前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...

  8. C#简单接口和继承示例详解——快速入门

    上一篇中我们说到继承,其实他们之间是差不多的. 接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口. C#中接口可以多继承,接口之间可以相互继承和多继承.一个类可以同时继承一个类和多个 ...

  9. 第五节:详细讲解Java中的接口与继承

    前言 大家好,给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢 什么是接口(interface) 接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象 interface ...

  10. java接口可以继承多个接口

    接口是常量值和方法定义的集合.接口是一种特殊的抽象类.   java类是单继承的.classB Extends classA java接口可以多继承.Interface3 Extends Interf ...

随机推荐

  1. 接口自动化测试框架 -- reudom

    reudom Automated testing framework based on requests and unittest interface. 基于 Unittest 和 Requests ...

  2. Spring MVC系列之模型绑定(SpringBoot)(七)

    前言 上一节我们在SpringBoot中启用了Spring MVC最终输出了HelloWorld,本节我们来讲讲Spring MVC中的模型绑定,这个名称来源于.NET或.NET Core,不知是否恰 ...

  3. 2017CCPC杭州(ABCDJ)

    所有的题目在这里<--- 待补... Problem A. HDU6264:Super-palindrome 题意: 题目定义了一个超级回文串,这个串满足:它的任一奇数长度的串都是回文串. 现在 ...

  4. 【Think In Java笔记】第1章 对象导论

    1. 对象导论 OOP 面向对象编程 C.Basic等语言所在的抽象仍要求在解决问题时基于计算机的解决,而不是基于所解决问题的结构来考虑. 要建立起问题空间的元素和解空间的对象之间一一映射的关系 万物 ...

  5. Date类(java.util)和SimpleDateFormat类(java.text)

    在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类.这个类最主要的作用就是获取当前时间,我们来看下 Date 类的使用: 使用 Date 类的默 ...

  6. 使用java做一个能赚钱的微信群聊机器人(2020年基于PC端协议最新可用版)

    前言 微信群机器人,主要用来管理群聊,提供类似天气查询.点歌.机器人聊天等用途. 由于微信将web端的协议封杀后,很多基于http协议的群聊机器人都失效了,所以这里使用基于PC端协议的插件来实现. 声 ...

  7. [论文翻译]Practical Diversified Recommendations on YouTube with Determinantal Point Processes

    目录 ABSTRACT(摘要) 1 INTRODUCTION(简介) 2 RELATED WORK 2.1 Diversification to Facilitate Exploration(对应多样 ...

  8. python检查是奇数还是偶数

    检查的依据:奇数除2余1:偶数除2无余数 num = int(input("请输入一个整数:")) if num % 2 == 1: print(num,"是奇数&quo ...

  9. wannafly camp day4

    2088: 电音之王 描述 题目描述: 终于活成了自己讨厌的样子. 听说多听电音能加快程序运行的速度. 定义一个数列,告诉你a0,a1,m0,m1,ca\_0,a\_1,m\_0,m\_1,ca0​, ...

  10. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第三节:处理压缩数据

    续上一节内容,本节主要讲解一下Web压缩数据的处理方法. 在HTTP协议中指出,可以通过对内容压缩来减少网络流量,从而提高网络传输的性能. 那么问题来了,在HTTP中,采用的是什么样的压缩格式和机制呢 ...