C#中介面的理解

來源:互聯網
上載者:User
介面的相關陳述1.一個介面定義了一個契約。2.介面可以包容方法、C#屬性、事件、以及索引器。3.在一個介面聲明中,我們可以聲明零個或者多個成員。4.所有介面成員的預設訪問類型都是public。5.如果在介面成員聲明中包括了任何修飾符,那麼會產生一個編譯器錯誤。6.與一個非抽象類別類似,一個抽象類別必須提供介面中所有成員的實現,只要這些成員在這個類的基類中出現過。  介面的理解1.        面向介面編程利用OO的一個基本性質——多態,相同方法不同表現。可以這樣想一下,client編寫自己程式的時候,如果直接面向一個具體類寫程式,那這個程式有個風吹草動的,那client就要受到影響,但如果面向一個介面就不同了,某個具體類變了,只知介面,不知具體類的client就可以完全不動。都說上層領導比較好當,因為可以乾的事通常對老百姓來說是虛的,越虛就越不容易錯。
這個道理在OO中也是適用的。2.       換個視角看,面向介面編程反映OO的另一個方面——封裝,介面將具體實現封裝了起來,可以不影響客戶的情況下切換實現3.       介面的作用,一言以蔽之,就是標誌類的類別(type of class)。把不同類型的類歸於不同的介面,可以更好的管理他們。OO的精髓,我以為,是對對象的抽象,最能體現這一點的就是介面。為什麼我們討論設計模式都只針對具備了抽象能力的語言(比如c++、java、c#等),就是因為設計模式所研究的,實際上就是如何合理的去抽象。(cowboy的名言是“抽象就是抽去像的部分”,看似調侃,實乃至理)。

 

假設我們公司有兩種程式員: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這個類中要再次重載WritePrograme(clsCSharpProgramer 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#,C,C++,JAVA這樣的程式員添加進來的話,我們只需把它們相關的類加進來,然後在main()中稍做修改就OK了。擴充性特別好!

另外我們如果把clsProject這個類封成一個組件,那麼當我們的使用者需要要擴充功能的時候,我們只需要在外部做很小的修改就能實現,可以說根本就用不著改動我們已經封好組件!是不是很方便,很強大!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.