轉: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.當類繼承多口後,能夠把返回的類類型轉變爲接口類型(即轉化爲父類,多態),這樣就能夠調用當前類中的方法了[工廠模式既是這樣].