C#中多型性的實現
阿新 • • 發佈:2020-02-05
C#語言三大特性:繼承,封裝,多型
一:多型性
多型是指一個行為具有多個不同表現形式的能力,在C#中通過多型性的檢測時機可以分為靜態多型性和動態多型性
靜態多型性:函式過載和運算子過載
動態多型性:抽象方法、重寫方法、隱藏方法
二:函式過載(overlode)
——函式名必須相同
——函式引數型別不同
——函式引數個數不同
——函式引數順序不同
三:抽象(abstract)
——包含抽象函式的類,類也必須定義為抽象的
——抽象函式只有定義沒有函式體,並且必須定義為public
——抽象類中可以包含普通函式和抽象函式
——抽象類不能例項化,不能使用抽象類去構造物件,但是可以使用抽象類去宣告物件
可以在類前新增sealed關鍵字,使類變為密封類,密封類有以下特點:
——不能被繼承,所以密封類中不能定義虛方法和抽象方法,抽象類不能定義為sealed
——重寫的方法可以宣告為密封方法,表示該方法不能被子類重寫
四:虛方法(virtual)
抽象方法與虛方法區別:
——抽象函式不能有函式體,虛擬函式必須有函式體
——當繼承了一個抽象類時,必須去實現抽象函式,抽象函式也只能在子類中去實現。但是虛擬函式可以在基類實現也可以在子類重寫
——抽象函式必須在抽象類中,虛擬函式不必須在抽象類中
五:重寫方法(override)與隱藏方法(new)
——隱藏方法的呼叫(用什麼型別來宣告,在呼叫方法的時候就會呼叫什麼型別的方法)
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) { //=====隱藏方法的呼叫(用什麼型別來宣告,在呼叫方法的時候就會呼叫什麼型別的方法) Boss oneEnemy = new Boss(); oneEnemy.Move(); //呼叫的是隱藏方法,用子類的宣告來呼叫的,呼叫的就是子類的Move Enemy twoEnemy = new Boss(); twoEnemy.Move(); //呼叫的隱藏方法,用父類的宣告來呼叫的,呼叫的就是父類的Move方法 //=====虛方法的呼叫(用什麼型別來構造,在呼叫方法的時候就會呼叫什麼型別的方法) Enemy threeEnemy = new Enemy(); threeEnemy.Attac(); //呼叫虛方法,用父類來例項化的,所以呼叫的是父類的Attac方法 Enemy fourEnemy = new Boss(); fourEnemy.Attac(); //呼叫虛方法,用子類來例項化的,所以呼叫的就是子類(Boss)的Attac方法 } }
virtual與new的原理:https://www.runoob.com/w3cnote/csharp-polymorphism2.html
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。