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

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

父類引用指向子類對象時調用方法,若是用是override重寫,執行的是子類的方法;若是用的是new覆蓋,執行的是父類的方法。code

若是看了上面那句話,你還不是很懂,請看下面炒雞清晰的代碼,就確定能明白啦!對象

public class BaseClass {string

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

}
public class DerivedClass : BaseClass {it

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

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

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

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

若是換成new的話,請看下面:方法

public class BaseClass {客戶端

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

}
public class DerivedClass : BaseClass {static

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

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

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

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

如今明白了吧!

若是是父類引用指向父類對象,固然是執行父類方法;一樣滴,子類引用指向子類對象,固然執行子類方法;

若是是父類引用指向子類對象呢?就是上面講的:子類用override重寫,該引用會向上傳遞到,執行子類方法;而若是是用new覆蓋的話,至關因而對父類隱藏了此方法,故而執行父類方法;

相關文章
相關標籤/搜索