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 ...
随机推荐
- 亲测有效!CLion2019.2的安装及汉化
CLion的安装.汉化 今天小杨写C语言时,发现这个软件(DEV-C++)太麻烦了,于是就在网上找了一下,发现了两个不错的软件,一个是VC++,另一个是Clion.比较亲于占用内存小的我,选择了后者, ...
- 【DDD】持久化领域对象的方法实践
[toc] 概述 在实践领域驱动设计(DDD)的过程中,我们会根据项目的所在领域以及需求情况捕获出一定数量的领域对象.设计得足够好的领域对象便于我们更加透彻的理解业务,方便系统后期的扩展和维护,不至于 ...
- ipaclient 4.5.4 requires jinja2, which is not installed. rtslib-fb 2.1.63 has requirement pyudev>=0.16.1, but you'll have pyudev 0.15 which is incompatible. ipapython 4.5.4 has requirement dnspython>=
- C#登出系统并清除Cookie
1.前端页面代码: 前端页面代码主要显示退出系统或者网站的可视化按钮代码,代码如下:(请忽略项目关键字:CPU) <ul class="nav navbar-nav navbar-ri ...
- 树上对抗搜索 - 树形dp
Alice and Bob are going on a trip. Alice is a lazy girl who wants to minimize the total travelling d ...
- poj 2689 区间素数筛
The branch of mathematics called number theory is about properties of numbers. One of the areas that ...
- String.valueOf(null)
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); ...
- 全网最全RabbitMQ总结,别再说你不会RabbitMQ
RabbitMQ入门教程 当初我学RabbitMQ的时候,第一时间就上GitHub找相应的教程,但是令我很失望的是没有找到,Spring,Mybatis之类的教程很多,而RabbitMQ的教程几乎找不 ...
- [洛谷P3621] [APIO2007] 风铃
Description 你准备给弟弟 Ike 买一件礼物,但是,Ike 挑选礼物的方式很特别:他只喜欢那些能被他排成有序形状的东西. 你准备给 Ike 买一个风铃.风铃是一种多层的装饰品,一般挂在天花 ...
- RocketMQ 实战之快速入门
原文地址:https://www.jianshu.com/p/824066d70da8 最近 RocketMQ 刚刚上生产环境,闲暇之时在这里做一些分享,主要目的是让初学者能快速上手RocketMQ. ...