C# 接口和继承
转:https://www.cnblogs.com/songhe123/p/9558545.html
接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。
例1:

- using System;
/**- 假设我们公司有两种程序员:VB程序员指的是用VB写程序的程序员,用VBpro这个类表示;C程序员指的是用C写程序的程序员,用Cpro这个类来表示。每个类都有一个WriteCode()方法。
- 现在公司来了一个项目,要求派某个程序员写一个程序。
- */
- namespace ConsoleApplication2
- {
- //VB程序员
- class VBpro
- {
- public void WriteCode()
- {
- Console.WriteLine("我用vb写代码");
- }
- }
- //C程序员
- class Cpro
- {
- public void WriteCode()
- {
- Console.WriteLine("我用c写代码");
- }
- }
- //编写项目类
- class Pro
- {
- public void WriteProgram(VBpro program)
- {
- program.WriteCode();
- }
- public void WriteProgram(Cpro program)
- {
- program.WriteCode();
- }
- }
- //测试
- class Program
- {
- static void Main(string[] args)
- {
- Pro p = new Pro();
- VBpro p1 = new VBpro();
- p.WriteProgram(p1);
- Cpro p2 = new Cpro();
- p.WriteProgram(p2);
- Console.ReadKey();
- }
- }
- }
- /**
- 但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类C#程序员类,同时在此项目类中要再次
- 重载WritePrograme(C#pro programer)方法。这下麻烦多了。如果还有C++程序员,JAVA程序员呢。但是如果改用接口,就完全不一样了
- */
- namespace ConsoleApplication2
- {
- //申明一个程序员接口
- public interface IProgramer
- {
- void WriteCode();
- }
- //vb程序员
- class VBpro : IProgramer
- {
- public void WriteCode()
- {
- Console.WriteLine("我用vb写代码");
- }
- }
- //c程序员
- class Cpro : IProgramer
- {
- public void WriteCode()
- {
- Console.WriteLine("我用c写代码");
- }
- }
- //编写项目类
- class Pro
- {
- public void WriteProgram(IProgramer iprogramer)
- {
- iprogramer.WriteCode();
- }
- }
- //测试
- class Program
- {
- static void Main(string[] args)
- {
- Pro p = new Pro();
- VBpro p1 = new VBpro();
- p.WriteProgram(p1);
- Cpro p2 = new Cpro();
- p.WriteProgram(p2);
- Console.ReadKey();
- }
- }
- }

运行结果:
例子2:

- using System;
- namespace ConsoleApplication1
- {
- public interface Ichoose
- {
- void on();
- void off();
- }
- public class TV : Ichoose
- {
- private string name = "test1";
- public void on()
- {
- Console.WriteLine("{0}电视打开了", this.name);
- }
- public void off()
- {
- Console.WriteLine("{0}电视关闭了", this.name);
- }
- }
- public class Ice : Ichoose
- {
- private string name = "test2";
- public void on()
- {
- Console.WriteLine("{0}冰箱打开了", this.name);
- }
- public void off()
- {
- Console.WriteLine("{0}冰箱关闭了", this.name);
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- TV tvString = new TV();
- tvString.on();
- tvString.off();
- Ice iceString = new Ice();
- iceString.on();
- iceString.off();
- Console.ReadKey();
- }
- }
- }

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

- using System;
- /**
- 假如你是一名在职学生,你就具有双重身份。一个身份是学生,必须完成学习任务,一个身份是职员,必须完成工作任务。进一步说,你是计算机类学生,除了学习基础课程,
- 还必须学习C#程序设计。现在建立一个模型,应该如何建立?
- 1.我们首先来定义一个学生接口,规定学生必须学习,再建立一个职员接口,规定职员必须完成工作任务。
- 2.计算机专业的学生,除了完成一般学习任务,还是学习C#。可以再定义一个接口,继承学生接口,规定自己的学习任务。
- */
- namespace ConsoleApplication3
- {
- //定义学生接口
- public interface IStudent
- {
- void study_base();
- }
- //定义职员接口
- public interface IEmployee
- {
- void work();
- }
- //定义计算机类学生接口
- public interface IIStudent : IStudent
- {
- void study_computer();
- }
- public class Infostudent : IEmployee, IIStudent
- {
- //实现学生接口
- public void study_base()
- {
- Console.WriteLine("数学、语文和英语必须学好");
- }
- //实现职员接口
- public void work()
- {
- Console.WriteLine("工作必须完成");
- }
- //实现计算机类学生接口
- public void study_computer()
- {
- Console.WriteLine("计算机类的学生除学好基础课外,还要学C#");
- }
- }
- //测试
- class Program
- {
- static void Main(string[] args)
- {
- Infostudent infostudent = new Infostudent();
- infostudent.study_base();
- infostudent.work();
- infostudent.study_computer();
- Console.ReadKey();
- }
- }
- }

运行结果:
总结:接口之间继承表示方法和类继承是相同的,继承的规则也是相同的,即子接口获得父接口的内容,如果有多个接口,接口之间用","隔开。
1.接口可以少写代码,把需要实现的方法交给子类,子类调用时通过传过来的不同子类(多态),实现调用当前子类的方法.
2.当类继承多口后,可以把返回的类类型转变为接口类型(即转化为父类,多态),这样就可以调用当前类中的方法了[工厂模式既是这样].
C# 接口和继承的更多相关文章
- Java学习笔记 07 接口、继承与多态
一.类的继承 继承的好处 >>使整个程序架构具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性 继承的基本思想 >>基 ...
- 使用Json.Net处理json序列化和反序列化接口或继承类
以前一直没有怎么关注过Newtonsoft的Json.Net这个第三方的.NET Json框架,主要是我以前在开发项目的时候大多数使用的都是.NET自带的Json序列化类JavaScriptSeria ...
- 线程入门之实现Runnable接口和继承Thread类
线程的2种使用方式:实现Runnable接口和继承Thread类 1.实现Runnable接口 实现Runnable接口,必须实现run方法,也是Runnable接口中的唯一一个方法 class Ru ...
- C# - 接口,继承
接口 接口是把公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合.不能像实例化一个类那样实例化接口.接口不能包含实现其成员的任何代码,而只能定义成员本身.实现过程必须在实现接口的类中完成. ...
- java复习(5)---接口、继承、多态
Java作为完全面向对象语言,接口.继承和多态是三个非常重要的概念. 1.继承. (1)关键字: extends (2)子类用super()调用父类构造函数,用super().方法 调用父类的成员方法 ...
- java 类的继承和接口的继承
父类 public class person { String name; int age; void eat(){ System.out.println("吃饭"); } voi ...
- Java进阶篇(一)——接口、继承与多态
前几篇是Java的入门篇,主要是了解一下Java语言的相关知识,从本篇开始是Java的进阶篇,这部分内容可以帮助大家用Java开发一些小型应用程序,或者一些小游戏等等. 本篇的主题是接口.继承与多态, ...
- C#简单接口和继承示例详解——快速入门
上一篇中我们说到继承,其实他们之间是差不多的. 接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口. C#中接口可以多继承,接口之间可以相互继承和多继承.一个类可以同时继承一个类和多个 ...
- 第五节:详细讲解Java中的接口与继承
前言 大家好,给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢 什么是接口(interface) 接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象 interface ...
- java接口可以继承多个接口
接口是常量值和方法定义的集合.接口是一种特殊的抽象类. java类是单继承的.classB Extends classA java接口可以多继承.Interface3 Extends Interf ...
随机推荐
- 接口自动化测试框架 -- reudom
reudom Automated testing framework based on requests and unittest interface. 基于 Unittest 和 Requests ...
- Spring MVC系列之模型绑定(SpringBoot)(七)
前言 上一节我们在SpringBoot中启用了Spring MVC最终输出了HelloWorld,本节我们来讲讲Spring MVC中的模型绑定,这个名称来源于.NET或.NET Core,不知是否恰 ...
- 2017CCPC杭州(ABCDJ)
所有的题目在这里<--- 待补... Problem A. HDU6264:Super-palindrome 题意: 题目定义了一个超级回文串,这个串满足:它的任一奇数长度的串都是回文串. 现在 ...
- 【Think In Java笔记】第1章 对象导论
1. 对象导论 OOP 面向对象编程 C.Basic等语言所在的抽象仍要求在解决问题时基于计算机的解决,而不是基于所解决问题的结构来考虑. 要建立起问题空间的元素和解空间的对象之间一一映射的关系 万物 ...
- Date类(java.util)和SimpleDateFormat类(java.text)
在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类.这个类最主要的作用就是获取当前时间,我们来看下 Date 类的使用: 使用 Date 类的默 ...
- 使用java做一个能赚钱的微信群聊机器人(2020年基于PC端协议最新可用版)
前言 微信群机器人,主要用来管理群聊,提供类似天气查询.点歌.机器人聊天等用途. 由于微信将web端的协议封杀后,很多基于http协议的群聊机器人都失效了,所以这里使用基于PC端协议的插件来实现. 声 ...
- [论文翻译]Practical Diversified Recommendations on YouTube with Determinantal Point Processes
目录 ABSTRACT(摘要) 1 INTRODUCTION(简介) 2 RELATED WORK 2.1 Diversification to Facilitate Exploration(对应多样 ...
- python检查是奇数还是偶数
检查的依据:奇数除2余1:偶数除2无余数 num = int(input("请输入一个整数:")) if num % 2 == 1: print(num,"是奇数&quo ...
- wannafly camp day4
2088: 电音之王 描述 题目描述: 终于活成了自己讨厌的样子. 听说多听电音能加快程序运行的速度. 定义一个数列,告诉你a0,a1,m0,m1,ca\_0,a\_1,m\_0,m\_1,ca0, ...
- 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第三节:处理压缩数据
续上一节内容,本节主要讲解一下Web压缩数据的处理方法. 在HTTP协议中指出,可以通过对内容压缩来减少网络流量,从而提高网络传输的性能. 那么问题来了,在HTTP中,采用的是什么样的压缩格式和机制呢 ...