C# 接口

一、爲何要使用接口,我憑什麼要使用接口,他對我有什麼利用價值?程序員

    答:簡單的說,經過多態的方式,使用接口能夠很好的隱藏代碼實現細節,從而解決代碼維護不易的問題。學習

 

二、C#接口的做用?spa

   答:設計

C#接口是一個讓不少初學C#者容易迷糊的東西,用起來好像很簡單,定義接口,裏面包含方法,但沒有方法具體實現的代碼,而後在繼承該接口的類裏面要實現接口的全部方法的代碼,但沒有真正認識到接口的做用的時候就以爲用接口是畫蛇添足,固然你這樣想那是絕對絕對錯誤的,比爾蓋茨的微軟請的員工都是比蓋茨還聰明的人,他們的C#能添這樣的多足嗎?!關於接口的做用,網上有一位就真的深刻淺出給咱們作了很好理解的分析。 code

咱們定義一個接口blog

public interface IBark
{
void Bark();
}

 

再定義一個類,繼承於IBark,而且必需實現其中的Bark()方法繼承

public class Dog:IBark
{
public Dog()
{}
public void Bark()
{
Consol.write("汪汪");
}
}


而後,聲明Dog的一個實例,並調用Bark()方法接口

Dog 旺財=new Dog();
旺財.Bark();

試想同樣,如果想調用Bark()方法,只須要在Dog()中聲明這樣的一個方法不就好了嗎,幹什麼還要用接口呢.由於接口中並無Bark()具體實現.真的實現仍是要在Dog().那麼使用接口不是畫蛇添足嗎?
還有人是這樣說的:從接口的定義方面來講,接口其實就是類和類之間的一種協定,一種約束.還拿上面的例子來講.全部繼承了IBark接口的類中必需實現Bark()方法.那麼從用戶(使用類的用戶)的角度來講,若是他知道了某個類是繼承於IBark接口,那麼他就能夠放心大膽的調用Bark()方法,而不用管Bark()方法具體是如何實現的.好比,咱們另外寫了一個類.it

public class Cat:IBark
{
public Cat()
{}
public void Bark()
{
Consol.write("喵喵");
}
}


當用戶用到Cat類或是Dog類的時候,知道他們繼承於IBark,那麼不用管類裏的具體實現,而就能夠直接調用Bark()方法,由於這兩個類中確定有關於Bark()方法的具體實現.

若是咱們從設計的角度來看.一個項目中用若干個類須要去編寫,因爲這些類比較複雜,工做量比較大,這樣每一個類就須要佔用一個工做人員進行編寫.好比A程序員去定Dog,B程序員去寫Cat.這兩個類原本沒什麼聯繫的,但是因爲用戶須要他們都實現一個關於""的方法.這就要對他們進行一種約束.讓他們都繼承於IBark接口,目的是方便統一管理.另外一個是方便調用.固然了,不使用接口同樣能夠達到目的.只不過這樣的話,這種約束就不那麼明顯,若是這樣類還有Duck類等等,比較多的時候不免有人會漏掉這樣方法.因此說仍是經過接口更可靠一些,約束力更強一些.class

三、C#中接口的深刻淺出

   

經過學習對C#中接口的做用有了更進一步的理解,拿出來跟你們分享一下,有說的不對的地方請你們指教。

 

假設咱們公司有兩種程序員:VB程序員,指的是用VB寫程序的程序員,用clsVBProgramer這個類表示;Delphi程序員指的是用Delphi寫程序的程序員,用clsDelphiProgramer這個類來表示。每一個類都有一個WriteCode()方法。定義以下: 

 

class clsVBProgramer()
{
....
WriteCode()
{
//VB語言寫代碼;
}
....
}

 

class clsDelphiProgramer()
{
....
WriteCode()
{
//Delphi語言寫代碼;
}
....
}

 

如今公司來了一個項目,要求派某個程序員寫一個程序。
class clsProject()
{
....
WritePrograme(clsVBProgramer programer)//VB寫代碼
{
programer.WriteCode();
}
WritePrograme(clsDelphiProgramer programer)//重載方法,用Delphi寫代碼
{
programer.WriteCode();
}
......
}
在主程序中咱們能夠這樣寫:
main()
{
clsProject proj=new clsProject;
//若是須要用VB寫代碼
clsVBProgramer programer1=new clsVBProgramer;
proj.WritePrograme(programer1);
//若是須要用Delphi寫代碼
clsDelphiProgramer programer2=new clsDelphiProgramer;
proj.WritePrograme(programer2);
}

 

可是若是這時公司又來了一個C#程序員,咱們怎麼改這段程序,使它可以實現用C#寫程序的功能呢?咱們須要增長一個新類clsCSharpProgramer,同時在此clsProject這個類中要再次重載WriteProgrameclsCSharpProgramer programer)方法。這下麻煩多了。若是還有C程序員,C++程序員,JAVA程序員呢。麻煩大了!

 

可是若是改用接口,就徹底不同了:
首先聲明一個程序員接口:
interface IProgramer()
{
WriteCode();
}
而後聲明兩個類,並實現IProgramer接口:
class clsVBProgramer():IProgramer
{
....
WriteCode()
{
//VB語言寫代碼;
}
....
}

 

class clsDelphiProgramer():IProgramer
{
....
WriteCode()
{
//Delphi語言寫代碼;
}
....
}
clsProject這個類進行一下修改:
class clsProject()
{
....
WritePrograme(IProgramer programer)
{
programer.WriteCode();//寫代碼
}
......
}

 

main()
{
clsProject proj=new clsProject;
IProgramer programer;
//若是須要用VB寫代碼
programer=new clsVBProgramer;
proj.WritePrograme(programer);
//若是須要用Delphi寫代碼
programer=new clsDelphiProgramer;
proj.WritePrograme(programer);
}
若是再有C#CC++JAVA這樣的程序員添加進來的話,咱們只需把它們相關的類加進來,而後在main()中稍作修改就OK了。擴充性特別好!

 

另外咱們若是把clsProject這個類封成一個組件,那麼當咱們的用戶須要要擴充功能的時候,咱們只須要在外部作很小的修改就能實現,能夠說根本就用不着改動咱們已經封好組件!是否是很方便,很強大!

相關文章
相關標籤/搜索