C# 類的繼承


繼承是面向對象編程的一個重要特性。任何類都可以從另一個類中繼承,這就是說,這個類擁有它繼承的類的所有成員。在OOP 中,被繼承的類稱為父類(也稱為基類)。注意,C#中的對象僅能直接派生於一個基類,當然基類也可以有自己的基類。

類的繼承一個重要作用是子類可重用父類的代碼。這樣就可以在一個地方集中維護一份代碼,避免了很多的重復的代碼。比如我們已經有一個Car類。在這個Car中有兩個最基本的方法啟動發動機和停止發動機 (1)startEngine();(2)StopEngine();

復制代碼
class Car { public int StartEngine() { //啟動發動機的代碼 return 0; } public int StopEngine() { //停止發動機的代碼 return 0; } }
復制代碼

 

這時候我們的系統需要有兩個新類,ModelACar和ModelBCar。它們都需要同樣的啟動發動機和停止發動機功能。除此之外,每個類還都有自己特殊的功能。如果沒有繼承,我們怎么辦呢?很簡單啊,把Car類中的這兩個方法copy過來就可以了。

復制代碼
class ModelACar { public int StartEngine() { //啟動發動機的代碼 return 0; } public int StopEngine() { //停止發動機的代碼 return 0; } public void ModelAFucntion1() { } public void ModelAFucntion2() { } } class ModelBCar { public int StartEngine() { //啟動發動機的代碼 return 0; } public int StopEngine() { //停止發動機的代碼 return 0; } public void ModelBFucntion1() { } public void ModelBFucntion2() { } }
復制代碼

 

現在問題就來了,如果有十種新的類都需要Car類中同樣的啟動和停止發動機的方法,那你怎么辦?在十個類中都copy同樣的代碼嗎?可以。但是很煩啊。尤其是以后修改維護的時候,更煩。少改了一個地方,就會出問題。所以繼承就是來幫我們解決這樣的問題。我們只需要新的類繼承Car類就可以了。新的類自動就有了Car類的全部方法。

繼承的語法和簡單。

class 子類的名字 : 父類的名字 { }

使用繼承后,ModelACar和ModelBCar的代碼變成這樣了。

復制代碼
class ModelACar : Car { public void ModelAFucntion1() { } public void ModelAFucntion2() { } } class ModelBCar : Car { public void ModelBFucntion1() { } public void ModelBFucntion2() { } }
復制代碼

但是我們同樣可以在ModelACar和ModelBCar 中訪問StartEngine和StopEngine方法。

在繼承一個父類時,成員的可訪問性就成了一個重要的問題。子類不能訪問父類的私有成員,但可以訪問其公共成員。不過,子類和外部的代碼都可以訪問公共成員。這就是說,只使用這兩個可訪問性,不能讓一個成員可由父類類和子類訪問,而不能由外部的代碼訪問。


為了解決這個問題,C#提供了第三種可訪問性:protected,只有子類才能訪問父類的protected 成員。對於外部代碼來說,這個可訪問性與私有成員一樣:外部代碼不能訪問private 成員和protected 成員。

 

來開一個具體的例子吧。你創建一個項目。解決方案名稱為Sloution24,項目名稱為Exercise24,項目類型為控制台程序。

新建三個類文件,名稱分別為Car,ModelACar,ModelBCar。

 

點擊Car.cs。修改代碼如下。

點擊ModelACar.cs。修改代碼如下。

 

點擊ModelBCar.cs。修改代碼如下。

 

點擊Program.cs。修改代碼如下。

 

運行結果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM