程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#基礎解析之Ⅵ(繼承)

C#基礎解析之Ⅵ(繼承)

編輯:C#入門知識

今天和大家探討C#中面向對象的特性之二---繼承

何為繼承?簡單的一句話就是:建立類之間的關系,實現代碼的重用性,方便系統擴展。說白了就是兩個關鍵點:a.避免代碼的冗余,b.進行程序擴展。

接下來我們進行更進一步的了解繼承,繼承是面向對象程序設計的主要特征之一,它可以讓使代碼的重用性大大加強,可以節省程序設計的時間。繼承就是在類之間建立一種相交關系,使得新定義的派生類的實例可以繼承已有的基類的特征和能力,而且可以加入新的特性或者是修改已有的特性建立起類的新層次,比如子類(派生類)可以繼承父類(基類) 某些成員,繼承和類的成員方法一樣,我們也可以定義屬性的重載、虛屬性、抽象屬性以及密封屬性的概念。繼承的兩大特性是傳遞性和單根性。

在生活中我們也實現了繼承比如:

 \ 


 

我們還是先來看個簡單的例子:
創建父類:
 1 class Dog
 2     {
 3         string type;//類型
 4         public string Type
 5         {
 6             get { return type; }
 7             set { type = value; }
 8         }
 9         int weight;//體重
10         public int Weight
11         {
12             get { return weight; }
13             set { weight = value; }
14         }
15         int height;//高度
16         public int Height
17         {
18             get { return height; }
19             set { height = value; }
20         }
21         public Dog() { }//無參數的構造方法
22         public Dog(string t, int w, int h)//帶參數的構造方法
23         {
24             this.type = t;
25             this.weight = w;
26             this.height = h;
27         }
28     }

添加Dog的子類
 1 class Collie : Dog//子類
 2     {
 3         public Collie()//無參數的構造方法
 4         {
 5             this.Type = "柯利犬";
 6             this.Weight = 34;
 7             this.Height = 66;
 8         }
 9         public void Act()//方法輸出柯利犬的特點
10         {
11             Console.WriteLine("性格:溫和,活潑,忠實,親切");
12         }
13     }
14     class SheltlandSheepdog : Dog//子類
15     {
16         public SheltlandSheepdog()//無參數的構造方法
17         {
18             this.Type = "喜樂蒂";
19             this.Weight = 18;
20             this.Height = 30;
21         }
22         public void Act()//方法輸出喜樂蒂的特點
23         {
24             Console.WriteLine("性格:溫和而忠實,聰明的犬種");
25         }
26     }

在Main方法中實例化子類對象並調用它們的方法:
 1 static void Main(string[] args)
 2         {
 3             Console.WriteLine("柯利犬的特點");
 4             Collie collie = new Collie();
 5             collie.Act();//調用方法www.2cto.com
 6             Console.WriteLine("喜樂蒂的特點");
 7             SheltlandSheepdog sheltlandsheepdog = new SheltlandSheepdog();
 8             sheltlandsheepdog.Act();//調用方法
 9             Console.ReadKey();
10         }

運行結果:

  \


 

base關鍵字
在繼承中base關鍵字是專門用來繼承父類的。在我們運用的時候一般是在重寫、覆蓋還有構造函數裡面來調用父類裡面的這個方法時用:base(),這個base好像和JAVA裡面的super相似(本人是搞.net的,對JAVA不是很了解)。C#裡面和base差不多的還有一個就是this了!其實這兩個用起來也很相似,不過還是有區別的,this是指向本身,base是指向父類。就比如說:你在父類裡面int n;你在子類裡面也int n; 那麼此時base.n和this.n表示的就不是同一個變量了,但是如果子類裡面沒有定義n,那麼base.n和this.n就是同一個變量了。
結合上例base 在帶參數的構造方法中的使用
public qingpingguo(string t,int w,int h):base(t,w,h){}
我們繼續看一下繼承的傳遞性
派生類是從基類那裡繼承特性,那麼派生類也可以作為其它類的基類。從一個基類派生出來多層類,這樣就形成了類層次結構。就好比汽車為基類,然後汽車又分為卡車和公共汽車,那麼卡車和公共汽車就是派生類,卡車又可以作為基類派生出小型卡車和重型卡車。簡單的說就是子類不僅僅能夠繼承父類的成員,還繼承了父類的父類的成員。我們來看一張圖就會明白了:

 \ 


 

繼承的單根性
繼承的單根性是指子類只能繼承一個父類,不能同時繼承多個父類。就好比兒子只能有一個父親(親生的),派生類只能從一個類中繼承,繼承不支持多重繼承。這樣規定是為了避免代碼結構的復雜性。

最後介紹兩個屬性:

一個是抽象屬性
使用abstract 修飾符聲明的屬性為抽象屬性。
抽象屬性的訪問器也是虛的,而且沒有提供訪問器的具體實現。這就要求在非虛的派生類中,由派生類自己通過重載屬性來提供對訪問器的具體實現。
abstract 和override 修飾符的同時使用,不但表示屬性是抽象的,而且它重載了基類中的虛屬性這時屬性的訪問器也是抽象的。
抽象屬性只允許在抽象類中聲明。
除了同時使用abstract 和override 修飾符這種情況之外,static, virtual, override和abstract 修飾符中任意兩個不能再同時出現。
密封屬性
使用sealed 修飾符聲明的屬性為密封屬性。類的密封屬性不允許在派生類中被繼承。密封屬性的訪問器同樣也是密封的。
屬性聲明時如果有sealed 修飾符,同時也必須要有override 修飾符。

總結:

  1.了解繼承;

  2.base關鍵字;

  3.繼承的傳遞性;

  4.繼承的單根性;

 

好啦!今天就到這了!我眼睛都快睜不開了!感覺寫的有點倉促,因為有好多東西沒有寫到!不過還是希望能夠對初學者有一些幫助!如果對初學者有點用的話,我覺得今天晚上就沒有白費功夫!

此文是本人的個人觀點,如有不完善或者不准確的地方,歡迎高手進行批評,老鳥進行指點。 


摘自  青蘋果

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved