C#關鍵字之過載overload、重寫override、覆寫overwrite(new)詳解

橙-景安伺服器代理發表於2018-10-23

過載(過載)overload、重寫(覆蓋)override、覆寫overwrite(new)詳解

一、override重寫,是在子類中重寫父類中的方法,兩個函式的函式特徵(函式名、引數型別與個數)相同。用於擴充套件或修改繼承的方法、屬性、索引器或事件的抽象或虛擬實現。提供從基類繼承的成員的新實現,而通過override宣告重寫的方法稱為基方法。 
注意事項: 
1.重寫基方法必須具有與override方法相同的簽名。 
2.override宣告不能更改virtual方法的可訪問性,且override方法與virtual方法必須具有相同級別訪問修飾符。 
3.不能用new、static、virtual修飾符修改override方法。 
4.重寫屬性宣告必須指定與繼承的屬性完全相同的訪問修飾符、型別和名稱。 
5.重寫的屬性必須是virtual、abstract或override。 
6.不能重寫非虛方法或靜態方法。 
7.父類中有abstract,那麼子類同名方法必定有override,若父類中有 virtual方法,子類同名方法不一定是override,可能是overload。 
8.override必定有父子類關係。

二、overload過載,在同一個類中方法名相同、引數或返回值不同的多個方法即為方法過載。 
注意事項: 
1.出現在同一個類中。 
2.引數列表不同或返回型別和引數列表都不同,只有返回型別不同不能過載。(引數列表包括引數個數和引數型別)

三、overwrite覆寫,用new實現。在子類中用 new 關鍵字修飾定義的與父類中同名的方法,也稱為覆蓋,覆蓋不會改變父類方法的功能。

另一種解釋new是指“隱藏”,是指子類隱藏了父類的方法,當然,通過一定的轉換,可以在子類的物件中訪問父類的方法。

示例:

class Parent
{
    public void F()
    {
        Console.WriteLine("Parent.F()");
    }
    public virtual void G() //抽象方法
    {
        Console.WriteLine("Parent.G()");
    }
    public int Add(int x, int y)
    {
        return x + y;
    }
    public float Add(float x, float y) //過載(overload)Add函式
    {
        return x + y;
    }
}
class ChildOne:Parent //子類一繼承父類
{
    new public void F() //重寫(overwrite)父類函式
    {
        Console.WriteLine("ChildOne.F()"); 
    }
    public override void G() //覆寫(override)父類虛擬函式,主要實現多型
    {
        Console.WriteLine("ChildOne.G()");
    }
}
class ChildTwo:Parent //子類二繼承父類
{
    new public void F()
    {
        Console.WriteLine("ChildTwo.F()");
    }
    public override void G()
    {
        Console.WriteLine("ChildTwo.G()");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Parent childOne = new ChildOne();
        Parent childTwo = new ChildTwo();
        //呼叫Parent.F()
        childOne.F();
        childTwo.F();
        //實現多型
        childOne.G();
        childTwo.G();
        Parent load = new Parent();
        //過載(overload)
        Console.WriteLine(load.Add(1, 2));
        Console.WriteLine(load.Add(3.4f, 4.5f));
        Console.Read();
    }
}
 


--------------------- 
作者:入秋楓葉 
來源:CSDN 
原文:https://blog.csdn.net/yiyelanxin/article/details/71711383 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關文章