1. 程式人生 > 程式設計 >C#中多型性的實現

C#中多型性的實現

C#語言三大特性:繼承,封裝,多型

一:多型性

多型是指一個行為具有多個不同表現形式的能力,在C#中通過多型性的檢測時機可以分為靜態多型性和動態多型性
靜態多型性:函式過載和運算子過載
動態多型性:抽象方法、重寫方法、隱藏方法

二:函式過載(overlode)

——函式名必須相同

——函式引數型別不同

C#中多型性的實現

——函式引數個數不同
C#中多型性的實現

——函式引數順序不同
C#中多型性的實現

三:抽象(abstract)

——包含抽象函式的類,類也必須定義為抽象的
C#中多型性的實現

——抽象函式只有定義沒有函式體,並且必須定義為public
C#中多型性的實現

——抽象類中可以包含普通函式和抽象函式
C#中多型性的實現

——抽象類不能例項化,不能使用抽象類去構造物件,但是可以使用抽象類去宣告物件

C#中多型性的實現

可以在類前新增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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。