重載、重寫---C#

首先,知道什麼是方法?

  • 方法是由 方法簽名 和一系列語句的代碼塊 組成。
  • 方法簽名包括方法的訪問級別(如:public 或private)、可修飾符(如:static 或者abstract或者virtual。。)、方法名稱參數
  • 方法分類
    1).靜態方法:
    被static關鍵字修飾的方法,成爲靜態方法,此時的靜態方法屬於類級別,不能通過類的實例進行訪問,只能通過方法所在的類名字點出來這個靜態方法名字。

    下面的代碼演示靜態方法的定義和調用:
    這裏寫圖片描述

    2).實例方法:
    相反,實例方法就是方法前面不加關鍵字static,直接通過new運算符,實例化一個對象後,通過創建的對象來點出來,實例方法;而且,它是不能通過類名字點出來實例方法的。
    下面的代碼演示實例方法的定義和調用:
    這裏寫圖片描述

重載

  • 指的是方法的方法名相同,但是參數列表(參數的類型,參數的個數,參數順序)不一樣,這些方法互稱爲方法的重載
  • 重載是平行的。是一個類的內部的方法名稱一樣參數列表不一樣的多個方法,以實現不同的需求(相同的功能)。

    下面的代碼演示方法重載得到的一些方法:
    這裏寫圖片描述

    是重載的如下:
    這裏寫圖片描述

重寫

  • 重寫是垂直的。是子類(派生類)對父類(基類)同名方法的重新實現。
  • 由於父類的方法不能夠完成某種功能,但是還必須得調用這個方法,則子類可以重寫父類中的這個方法,加強其功能。
  • 在父類裏面,如果一個方法可以讓子類重寫,必須在方法的返回類型前面用virtual、abstract、voerride(繼承了父類的虛方法)關鍵字來修飾。說明這個方法可以被子類重寫。

    下面的代碼演示方法重寫得到的一些方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _001基礎
{
    class Program
    {

        static void Main(string[] args)
        {
            Animal horse = new Horse();
            horse.Voice();
            Animal sheep = new Sheep();
            //相同類型的對象調用相同的方法表現出不同的行爲
            sheep.Voice();
            Console.ReadKey();
        }
    }
    //動物父類
    public class Animal
    {
        //幾乎所有的動物都具有發出聲音的能力
        //但是對於動物的子類來說,每個子類發出的聲音都是不一樣的
        public virtual void Voice()
        {
            Console.WriteLine("動物開始發出聲音了");
        }
    }

    //馬(子類),子類應該重寫父類中的方法,以實現自己特有的行爲
    public class Horse : Animal
    { 
        //通過override關鍵字來重寫父類中方法
        public override void Voice()
        {
            //調用父類中的方法
            base.Voice();
            Console.WriteLine("馬發出嘶嘶。。。。嘶嘶。。。的聲音");
        }
    }

    //羊(子類)
    public class Sheep : Animal
    {
        public override void Voice()
        {
            base.Voice();
            Console.WriteLine("羊發出咩。。。咩。。。。的聲音");
        }
    }
}

結果:
這裏寫圖片描述

阻止派生類重寫虛成員—-

怎麼停止對馬類中的voice方法繼續重寫?使用sealed關鍵字,停止繼續重新父類中方法

 public class Horse : Animal
    { 
        //通過override關鍵字來重寫父類中方法
        public sealed override void Voice()
        {
            //調用父類中的方法
            base.Voice();
            Console.WriteLine("馬發出嘶嘶。。。。嘶嘶。。。的聲音");
        }
    }
此時如果再有類繼承這個“馬”類,就不能繼承該vocice方法了
發佈了125 篇原創文章 · 獲贊 11 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章