菜鳥C#成長記——小議介面和抽象類別比較

來源:互聯網
上載者:User

我們在日常中經常討論到介面和抽象了的異同,下面我就跟大家探討一下這個問題,以作拋磚引玉之用,希望大家多多砸玉哦。

介面和抽象類別非常相似,包括它們要求實現和繼承自己的類實現全部方法屬性等。如上文介面的實現所提到的,我們完全可以將IStorable聲明成一個抽象類別:

 

        //定義抽象類別
        abstract class Stroable
        {
            abstract public void Read();
            abstract public void Write();
        }

 

        //定義介面
        interface IStorable
        {
            void Read();
            void Write(object obj);
            int Status { get;set;}
        }

     

      Document從IStrobale繼承,跟實現介面沒有太大區別。

介面是可以多重繼承,抽象類別不可以。只有在必須使用方法定義或者成員變數的時候,才應考慮採用抽象類別。

       按照相顧的技術標準文獻,Microsoft的設計人員一般不建議大家使用介面的,而是推薦使用抽象類別,因為抽象類別更加便於版本控制。假設你設計了一個介面供程式員使用,現在想給這個介面增加一個新的成員,這時候你就不得不改變既有的介面,破壞針對原有介面編寫新的代碼,或者是兩外建立想IStrobale2這樣的新介面。如果你經常這樣做的話,你很快就會得到大批這樣緊密關聯的介面,造成系統的越來越複雜。

       而使用抽象類別的話,你只是需要追加一個新的虛擬方法並配以預設實現就可以了,這樣做既可以解決問題,又沒有在同一個命名空間中引入新的類。

       最佳的體驗實踐是:若要建立一個被多人複用的類庫,最好使用抽象類別;若是為了單個項目建立類,使用介面更好,因為介面具有抽象類別所沒有的更加容易理解的彈性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.