C++ VS C#(9):繼承

來源:互聯網
上載者:User

//=====================================================================
//TITLE:
//    C++ VS C#(9):繼承
//AUTHOR:
//    norains
//DATE:
//    Thursday  17-January-2011
//Environment:
//    Visual Studio 2010
//    Visual Studio 2005
//=====================================================================

1. 繼承

 

   C++和C#都有類,那麼自然而然,繼承的存在也不在話下。不過在繼承方面,兩者差異頗多。最明顯的區別在於,C++可以多重繼承,也就是說,C++能夠有多個父類,而C#只有一個。換句話來說,下面這段代碼可以在C++中順利編譯,但在C#中卻是會遭到編譯器無情的抱怨:
class CMyBase_A<br /> {<br />  ...<br /> };</p><p> class CMyBase_B<br /> {<br />  ...<br /> };</p><p> //CMyClass同時繼承於CMyBase_A和CMyBase_B。這段代碼在C#中無法通過<br /> class CMyClass:<br /> public CMyBase_A,<br /> public CMyBase_B<br /> {<br />  ...;<br /> };<br />  

   是不是說,C#永遠只能繼承於一個父類,而無法有更多的擴充了?C#比C++多了兩個+,自然不會犯如此愚蠢的錯誤,因為它還有一個叫做介面的東西。和只能有一個父類不一樣,介面可以有多個。介面的關鍵字是interface,和類相似,也能夠用public或internal來進行修飾。所不同的是,不能使用abstract或sealed,因為這兩個關鍵字對於介面來說,是沒有任何意義的,因為介面必須是不能執行個體化,且一定能夠被繼承的。
  
   如果以介面的方式來更改上述的代碼,那麼在C#中將會變更為如此:
   class CMyBase<br /> {<br />  ...<br /> };</p><p> interface IMyBase_A<br /> {<br />  ...<br /> };</p><p> interface IMyBase_B<br /> {<br />  ...<br /> };</p><p> //一個父類,多個介面<br /> class CMyClass:<br /> CMyBase,<br /> IMyBase_A,<br /> IMyBase_B<br /> {<br /> ...<br />  };</p><p>
  
  這裡讓C++程式員容易忽略的是,C#的介面的順序是有嚴格規定的,介面必須排在類之後,也就是說,下面這段代碼是錯誤的:
  //介面排在類的前面,該代碼無法進行編譯<br /> class CMyClass:<br /> IMyBase_A,<br /> CMyBase,<br /> IMyBase_B<br /> {<br /> ...<br />  };
  
  
  C#在繼承中還有一個容易讓人忽略的小問題,就是衍生類別絕對不能比父類的的可存取權限高,如下代碼所示:
  //父類為internal<br />  internal class CMyBase<br />  {<br />   ...<br /> }</p><p> //衍生類別為public,無法通過編譯<br /> public class CMyClass:<br /> CMyBase<br /> {<br /> ...<br /> };<br />
  
  在這段代碼中,父類的CMyBase被internal所修飾,而衍生類別CMyClass被public修飾,因為public的可存取權限遠遠高於internal,違反了衍生類別可存取權限不能高於父類的規定,所以這段代碼無論如何也不能通過編譯。

聯繫我們

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