接口是方法的抽象,如果不同的類有同樣的方法,那么就應該考慮使用接口。
例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(); } } }
運行結果:
總結:接口之間繼承表示方法和類繼承是相同的,繼承的規則也是相同的,即子接口獲得父接口的內容,如果有多個接口,接口之間用","隔開。