C#中重寫(override)和覆蓋(new)的區別,簡單區分

寫了很久的c# ,但對一些細枝末節也沒有深糾,override和New就是

#region 重寫



public class C1

{

    public virtual string GetName()

    {

        return "byronLoong";

    }

}



public class C2 : C1

{

    public override string GetName()

    {

        return "龍龍";

    }

}



 C1 c1 = new C1();

 Console.WriteLine(c1.GetName());//輸出“byronLoong”



 C2 c2 = new C2();

 Console.WriteLine(c2.GetName());//輸出“龍龍”




 //重點看這裏



 C1 c3 = new C2();

 Console.WriteLine(c3.GetName());//輸出“龍龍” 



#endregion
#region 覆蓋



public class C1

{

    public string GetName()

    {

        return "ByronLoong";

    }

}



public class C2 : C1

{

    public new string GetName()

    {

        return "龍龍";

    }

}



C1 c1 = new C1();

Console.WriteLine(c1.GetName());//輸出“ByronLoong”



C2 c2 = new C2();

Console.WriteLine(c2.GetName());//輸出“龍龍”




//重點看這裏,和上面的重寫作比較



C1 c3 = new C2();

Console.WriteLine(c3.GetName());//輸出“ByronLoong” 



#endregion

總結

  • override是徹底的將這個父類的方法重寫,而不是保留父類的方法隱藏起來;

  • new則是把父類隱藏起來,當用父類的標籤時還會使用父類的標籤,當用子類的標籤時用子類的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章