转:https://www.cnblogs.com/songhe123/p/9558545.htmlhtml
接口是方法的抽象,若是不一样的类有一样的方法,那么就应该考虑使用接口。程序员
例1:post
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(); } } }
运行结果:this
接口的继承spa
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(); } } }
运行结果:3d
总结:接口之间继承表示方法和类继承是相同的,继承的规则也是相同的,即子接口得到父接口的内容,若是有多个接口,接口之间用","隔开。code
1.接口能够少写代码,把须要实现的方法交给子类,子类调用时经过传过来的不一样子类(多态),实现调用当前子类的方法.
2.当类继承多口后,能够把返回的类类型转变为接口类型(即转化为父类,多态),这样就能够调用当前类中的方法了[工厂模式既是这样].