一句話說明白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覆蓋的話,至關因而對父類隱藏了此方法,故而執行父類方法;