转: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# 接口和继承的更多相关文章

  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. Kubernetes资源与对象简述

    资料 k8s基本对象概念 背景 资源和对象   Kubernetes 中的所有内容都被抽象为"资源",如 Pod.Service.Node 等都是资源."对象" ...

  2. 浅谈Java三大特性之封装

    目录 前言 好处 介绍(实现方式) 示例 小结 感谢阅读!!! 三大特性之浅谈封装 前言 英语:Encapsulation--封装,包装. 面向对象的封装与真实世界的目的是一样的.封装能够使外部访问者 ...

  3. xshell连接kali linux虚拟机

    这次测试一波三折 刚开始在百度经验看的先修改ssh参数,蓝色的字是百度的,重点都在图片上 1.修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 将#Passwo ...

  4. Could not write JSON: Infinite recursion (StackOverflowError);

    转自:https://blog.csdn.net/east123321/article/details/80435051 在controller返回数据到统一json转换的时候,出现了json inf ...

  5. es5和es6中查找数组中的元素

    let array = [1,2,3,4,5] //es5 let find = array.filter(function (item){ return item %2 === 0//返回满足条件的 ...

  6. kubernetes concepts (一)

    Concepts The Concepts section helps you learn about the parts of the Kubernetes system and the abstr ...

  7. 若依框架. 仿ThymeLeaf前端SelectDictLable方法

    在framework项目下新增所需服务

  8. wtforms 钩子函数

    参考: https://www.cnblogs.com/wupeiqi/articles/8202357.html class LoginForm(Form): name = simple.Strin ...

  9. moco响应中文乱码

    moco版本为:moco-runner-standalone-0.11.1.jar 在一次使用moco框架的时候,浏览器查看响应时,发现返回来的中文是乱码. 按照网上的操作,在响应结果中加上heade ...

  10. 60 个让程序员崩溃的瞬间,太TM真实了

    前方高能!笑死人不偿命系列~ 表演即将开始,吃东西的请停下来,不然你会后悔的 1. 公司实习生找 Bug 2. 在调试时,将断点设置在错误的位置 3. 当我有一个很棒的调试想法时 4. 偶然间看到自己 ...