C#中多態(tài)性的實(shí)現(xiàn)
C#語言三大特性:繼承,封裝,多態(tài)
一:多態(tài)性
多態(tài)是指一個行為具有多個不同表現(xiàn)形式的能力,在C#中通過多態(tài)性的檢測時機(jī)可以分為靜態(tài)多態(tài)性和動態(tài)多態(tài)性
靜態(tài)多態(tài)性:函數(shù)重載和運(yùn)算符重載
動態(tài)多態(tài)性:抽象方法、重寫方法、隱藏方法
二:函數(shù)重載(overlode)
——函數(shù)名必須相同
——函數(shù)參數(shù)類型不同
——函數(shù)參數(shù)個數(shù)不同
——函數(shù)參數(shù)順序不同
三:抽象(abstract)
——包含抽象函數(shù)的類,類也必須定義為抽象的
——抽象函數(shù)只有定義沒有函數(shù)體,并且必須定義為public
——抽象類中可以包含普通函數(shù)和抽象函數(shù)
——抽象類不能實(shí)例化,不能使用抽象類去構(gòu)造對象,但是可以使用抽象類去聲明對象
可以在類前添加sealed關(guān)鍵字,使類變?yōu)槊芊忸?,密封類有以下特點(diǎn):
——不能被繼承,所以密封類中不能定義虛方法和抽象方法,抽象類不能定義為sealed
——重寫的方法可以聲明為密封方法,表示該方法不能被子類重寫
四:虛方法(virtual)
抽象方法與虛方法區(qū)別:
——抽象函數(shù)不能有函數(shù)體,虛函數(shù)必須有函數(shù)體
——當(dāng)繼承了一個抽象類時,必須去實(shí)現(xiàn)抽象函數(shù),抽象函數(shù)也只能在子類中去實(shí)現(xiàn)。但是虛函數(shù)可以在基類實(shí)現(xiàn)也可以在子類重寫
——抽象函數(shù)必須在抽象類中,虛函數(shù)不必須在抽象類中
五:重寫方法(override)與隱藏方法(new)
——隱藏方法的調(diào)用(用什么類型來聲明,在調(diào)用方法的時候就會調(diào)用什么類型的方法)
——重寫方法的調(diào)用(用什么類型來構(gòu)造,在調(diào)用方法的時候就會調(diào)用什么類型的方法)
class Enemy { public void Move() { Console.WriteLine("Enemy Move"); } public virtual void Attack() { Console.WriteLine("Enemy Attack"); } } class Boss : Enemy { public override void Attack() { Console.WriteLine("Boss Attack"); } public new void Move() { Console.WriteLine("Boss Move"); } } class MainClass { static void Main(string[] args) { //=====隱藏方法的調(diào)用(用什么類型來聲明,在調(diào)用方法的時候就會調(diào)用什么類型的方法) Boss oneEnemy = new Boss(); oneEnemy.Move(); //調(diào)用的是隱藏方法,用子類的聲明來調(diào)用的,調(diào)用的就是子類的Move Enemy twoEnemy = new Boss(); twoEnemy.Move(); //調(diào)用的隱藏方法,用父類的聲明來調(diào)用的,調(diào)用的就是父類的Move方法 //=====虛方法的調(diào)用(用什么類型來構(gòu)造,在調(diào)用方法的時候就會調(diào)用什么類型的方法) Enemy threeEnemy = new Enemy(); threeEnemy.Attac(); //調(diào)用虛方法,用父類來實(shí)例化的,所以調(diào)用的是父類的Attac方法 Enemy fourEnemy = new Boss(); fourEnemy.Attac(); //調(diào)用虛方法,用子類來實(shí)例化的,所以調(diào)用的就是子類(Boss)的Attac方法 } }
virtual與new的原理:https://www.runoob.com/w3cnote/csharp-polymorphism2.html
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
DataTables List互相轉(zhuǎn)換的實(shí)現(xiàn)類示例
這篇文章主要介紹了將DataTable轉(zhuǎn)換為List,將List轉(zhuǎn)換為DataTable的實(shí)現(xiàn)類實(shí)例方法,大家參考使用吧2013-11-11基于C#技術(shù)實(shí)現(xiàn)身份證識別功能
這篇文章主要介紹了基于C#技術(shù)實(shí)現(xiàn)身份證識別功能的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07C# 二進(jìn)制數(shù)組與結(jié)構(gòu)體的互轉(zhuǎn)方法
本文將和大家介紹 MemoryMarshal 輔助類,通過這個輔助類用來實(shí)現(xiàn)結(jié)構(gòu)體數(shù)組和二進(jìn)制數(shù)組的相互轉(zhuǎn)換,對C# 二進(jìn)制數(shù)組與結(jié)構(gòu)體的互轉(zhuǎn)方法感興趣的朋友一起看看吧2023-09-09C#使用RegNotifyChangeKeyValue監(jiān)聽注冊表更改的方法小結(jié)
RegNotifyChangeKeyValue的最后一個參數(shù)傳遞false,表示以同步的方式監(jiān)聽,這篇文章主要介紹了C#使用RegNotifyChangeKeyValue監(jiān)聽注冊表更改的方法小結(jié),需要的朋友可以參考下2024-06-06基于C#實(shí)現(xiàn)設(shè)置桌面背景功能
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)設(shè)置桌面背景功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12winform模擬鼠標(biāo)按鍵的具體實(shí)現(xiàn)
這篇文章介紹了winform模擬鼠標(biāo)按鍵的具體實(shí)現(xiàn),有需要的朋友可以參考一下2013-10-10