1. 程式人生 > >關於C#中類方法的重寫和覆蓋

關於C#中類方法的重寫和覆蓋

在C#中改變類中相同名稱的方法的實現過程中有三種方式:過載,重寫和覆蓋。
首先過載是指具有相同的方法名,通過改變引數的個數或者引數型別實現同名方法的不同實現。
重寫則是隻在繼承中,子類通過override關鍵字修飾方法,實現父類和子類相同方法的不同實現,注意,父類方法必須是用virtual或者abstract關鍵字修飾的虛方法或者抽象方法,例如:
public class A
{
public virtual void Show()
{
Console.Write(“父類”);
}
}

public class B:A
{
public override void Show()
{
Console.Write(“子類”);
}
}

public static void Main(string[] args)
{
B sub=new B();
A sup = new B();
sup.Show();
sub.Show();
Console.ReadKey();
}
輸出結果是:子類 子類

覆蓋則是指在繼承中,子類通過在與父類相同方法名之前用new修飾的一個新的方法的定義,如:
public class A
{
public void Show()
{
Console.Write(“父類”);
}
}

public class B:A
{
public new void Show()
{
Console.Write(“子類”);
}
}
public static void Main(string[] args)
{
B sub=new B();
A sup = new B();
sup.Show();
sub.Show();
Console.ReadKey();
}
輸出結果為:父類 子類
注意:new可以不用寫也可以成功執行
總結:由上面的結果可以知道,重寫的結果是當進行父類物件在初始化的時候向下轉型的時候

該物件將引用的方法是子類重寫後的方法,如果是覆蓋的話,那麼該物件引用的方法依然是父類的方法,也就是說子類的方法和父類的方法沒有什麼聯絡。