C#中override和new的區別

C#中重寫(override)和覆蓋(new)的區別
重寫
用關鍵字 virtual 修飾的方法,叫虛方法。可以在子類中用override 聲明同名的方法,這叫“重寫”。相應的沒有用virtual修飾的方法,我們叫它實方法。
重寫會改變父類方法的功能。
看下面演示代碼

#region 重寫
public class C1
{
    public virtual string GetName()
    {
        return "叔祥";
    }
}
public class C2 : C1
{
    public override string GetName()
    {
        return "xiangshu";
    }
}
 C1 c1 = new C1();
 Console.WriteLine(c1.GetName());//輸出“祥叔”
 C2 c2 = new C2();
 Console.WriteLine(c2.GetName());//輸出“xiangshu”

 //重點看這裏

 C1 c3 = new C2();
 Console.WriteLine(c3.GetName());//輸出“xiangshu”
# endregion

覆蓋
在子類中用 new 關鍵字修飾 定義的與父類中同名的方法,叫覆蓋。
覆蓋不會改變父類方法的功能。
看下面演示代碼:

#region 覆蓋
public class C1
{
    public string GetName()
    {
        return "祥叔";
    }
}
public class C2 : C1
{
    public new string GetName()
    {
        return "xiangshu";
    }
}
C1 c1 = new C1();
Console.WriteLine(c1.GetName());//輸出“祥叔”
C2 c2 = new C2();
Console.WriteLine(c2.GetName());//輸出“xiangshu”

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

C1 c3 = new C2();
Console.WriteLine(c3.GetName());//輸出“祥叔”
#endregion
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章