virtual、override-蝌蚪和青蛙-C#多态
文章目錄
- 多態的概念
- 多態的實現
- 方法重載、重寫、隱藏
- 重載
- 重寫
- 隱藏
|
多態的概念
什么是多態?
多態一次最早用于生物學,指同一種族的生物具有不同的特性。比如青蛙小時候是蝌蚪,長大了是青蛙,同是一種生物但是有不同的表現形式。
在C#中多態的定義是:同一操作作用于不同類的對象,不同的類的對象進行不同的執行,最后產生不同的執行結果。如所有的動物都有吃東西這一功能,但是羊吃草,獅子吃肉,每種動物都有自己的吃食方式。
重載是多態的一種。
多態的實現
C#中支持基于接口的多態和基于繼承的多態,基于繼承的多態設計在基類中定義方法,并在派生類中重寫方法。多態和重寫是緊密聯系的,重寫是實現多態的重要手段。重寫基類方法就是修改它的實現,或者說在派生類中對繼承的基類方法重新編寫。在基類中用virtual關鍵字聲明的方法在派生類中可以重寫。
- 虛函數定義語法格式如下:
- <訪問修飾符> virtual 返回類型 方法名(){//方法主體}
在派生類中使用override關鍵字來聲明重寫,以實現對基類中的虛擬方法修改或重新編寫。如在上一篇文章中基類Person類中聲明一個display方法,用于顯示姓名、年齡和性別等信息。
public void DisPlay() //基類共用方法,顯示人的信息{Console.WriteLine("{0}是{1}性,年齡為{2}歲",this._name,this._gender,this._age);}person的派生類student和teacher調用display時都會顯示姓名、性別、年齡信息,要想使顯示學生的信息和顯示老師的信息不一樣,就需要使用virtual關鍵字把基類中的display方法定義成虛函數,使用override關鍵字在派生類重寫display方法。
public virtual void DisPlay() //基類定義虛函數方法,顯示人的信息{Console.WriteLine("{0}是{1}性,年齡為{2}歲",this._name,this._gender,this._age);}
代碼如下:在派生類student中重寫基類的虛函數,使用override關鍵字,代碼如下:
public override void DisPlay() //重寫基類虛函數{Console.WriteLine("這是學生");base.DisPlay();}在派生類teacher中重寫基類的虛函數,使用override關鍵字,代碼如下:
public override void DisPlay() //重寫基類虛函數{Console.WriteLine("這是老師");base.DisPlay();}重寫時,子類重寫方法的訪問級別和父類虛擬方法的訪問級別必須相同。如上代碼,父類方法是public,子類也必須是public。
方法重載、重寫、隱藏
重載
重載是在同一個作用域內發生,定義一系列同名方法,但是方法的參數列表不同,就是簽名不同,簽名由方法名和參數組成。能通過傳遞不同的參數來決定到底調用哪一個同名方法。注意返回值類型不同不能構成重載,因為簽名不包括返回值。
重寫
基類方法中使用virtual關鍵字聲明方法和派生類中使用override關鍵字聲明的方法名稱相同,參數列表也相同,就是基類的方法和派生類方法相同,實現了派生類重寫基類中的同名方法。
隱藏
基類中的方法不聲明為virtual,在派生類中聲明與基類重名時,需要使用new關鍵字,以隱藏基類同名方法。
public virtual void DisPlay() //基類定義虛函數方法,顯示人的信息{Console.WriteLine("{0}是{1}性,年齡為{2}歲",this._name,this._gender,this._age);} public virtual void DisPlay(string id) //同名方法實現重載{this.DisPlay();Console.WriteLine("身份證號是:{0},id);}
如在person類中聲明兩個display方法用于顯示person的信息演示重載,在其派生類中實現display重寫和隱藏的代碼如下:在派生類student類中聲明如下方法使用隱藏:
public override void DisPlay() //重寫基類虛函數{Console.WriteLine("這是學生");base.DisPlay();} public new void DisPlay(string no) //使用new隱藏基類{Console.WriteLine("這是學生");base.DisPlay();Console.WriteLine("學生學號是:{0},no);} ------------------------------------------------------------------------------------------分割線 ------------------------------------------------------------------------------------------- 博主簡介:
- 工業自動化上位機軟件工程師、機器視覺算法工程師、運動控制算法工程師。目前從業于智能制造自動化行業。 博主郵箱:2296776525@qq.com
- 幫忙點個贊吧。哈哈。
總結
以上是生活随笔為你收集整理的virtual、override-蝌蚪和青蛙-C#多态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 区块链技术白皮书
- 下一篇: 我的世界java环境安装包_我的世界JA