一句話說明白C#中的new與override的區別

毒魚發表於2019-02-16

一句話說明白C#中的new與override的區別:

父類引用指向子類物件時呼叫方法,如果用是override重寫,執行的是子類的方法;如果用的是new覆蓋,執行的是父類的方法。

如果看了上面那句話,你還不是很懂,請看下面炒雞清晰的程式碼,就肯定能明白啦!

public class BaseClass {

public virtual void PrintSomething(){
    Console.WriteLine("執行了 父類 方法!");
}

}
public class DerivedClass : BaseClass {

public override void PrintSomething(){
    Console.WriteLine("執行了 子類 方法!");
}

}
//客戶端
public static void Main(string[] args){

BaseClass instance = new DerivedClass();  //父類引用指向子類物件
instance.PrintSomeThing();

}
//輸出:
執行了 子類 方法!

如果換成new的話,請看下面:

public class BaseClass {

public virtual void PrintSomething(){
    Console.WriteLine("執行了 父類 方法!");
}

}
public class DerivedClass : BaseClass {

public new void PrintSomething(){
    Console.WriteLine("執行了 子類 方法!");
}

}
//客戶端
public static void Main(string[] args){

BaseClass instance = new DerivedClass();  //父類引用指向子類物件
instance.PrintSomeThing();

}
//輸出:
執行了 父類 方法!

現在明白了吧!

如果是父類引用指向父類物件,當然是執行父類方法;同樣滴,子類引用指向子類物件,當然執行子類方法;

如果是父類引用指向子類物件呢?就是上面講的:子類用override重寫,該引用會向上傳遞到,執行子類方法;而如果是用new覆蓋的話,相當於是對父類隱藏了此方法,故而執行父類方法;

相關文章