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 ...
随机推荐
- 从0开发3D引擎(五):函数式编程及其在引擎中的应用
目录 上一篇博文 函数式编程的优点与缺点 优点 缺点 为什么使用Reason语言 函数式编程学习资料 引擎中相关的函数式编程知识点 数据 不可变数据 可变数据 函数 纯函数 高阶函数 柯西化 参考资料 ...
- JAVA并发之锁获取步骤及锁优化
在另外的两篇文章中先后介绍了轻量级同步关键字volatile和重量级锁关键字synchronized,这两个关键字是Java语言中进行线程同步的基本方式(当然还有ReentrenLock等显式锁方式) ...
- 记录这两年是如何一步一步转型到.net core+k8s
2017年12月份,我离开北京,回到了武汉,开始在现在这家公司担任架构师工作.经过2年的时间,逐步完成以.net core+k8s为核心的技术架构.文末有彩蛋. 以下整理这两年的主要时间节点: 201 ...
- ArcEngine语法笔记(VB)
1.获取图层字段 Dim pTable As ITable = pLayer Dim pField As IField pField = pTable.Fields.Field(i) Next 2. ...
- IO流之处理流用法总结
处理流之一:缓冲流1.为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区. 2.缓冲流要“套接”在相应 ...
- CF825G Tree Queries
[题意] 一棵树有 n个节点,初始均为白色,有两种操作: 1. 1 x 代表把结点 x 设置为黑色 2. 2 x 代表查询 x 到树上任意一个黑色结点的简单路径上的编号最小的结点的编号 输入 t 和 ...
- 极简安装 TensorFlow 2.0 GPU
前言 之前写了几篇关于 TensorFlow 1.x GPU 版本安装的博客,但几乎没怎么学习过.之前基本在搞 Machine Learning 和 Data Mining 方面的东西,极少用到 NN ...
- C#实现DataTable转.CSV文件
将DataTable转换成CSV文件是一种常见的转换形式,主要通过遍历Table的每行,再对每行遍历每列,实现对数据的读取,然后用分隔符分隔Table的每个栏位数据,把读取的字符写入到CSV文件中.这 ...
- lldb调试器知多少
lldb调试器简介 lldb 是一个有着 REPL 的特性和 C++ .Python 插件的开源调试器.lldb调试器的由来是伴随着Xcode的版本升级而来. Xcode4.3之前使用的默认调试器 ...
- NPOI导出Excel生成多个sheet
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...