接口是方法的抽象,如果不同的類有同樣的方法,那么就應該考慮使用接口。
例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();
}
}
}
運行結果:

總結:接口之間繼承表示方法和類繼承是相同的,繼承的規則也是相同的,即子接口獲得父接口的內容,如果有多個接口,接口之間用","隔開。

