首先,知道什麼是方法?
- 方法是由 方法簽名 和一系列語句的代碼塊 組成。
- 方法簽名包括方法的訪問級別(如: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方法了