实例讲解override和new的区别
一、override:Override關鍵字主要是提供派生類對基類方法的新實現。
1、不可以用于重寫非虛方法和靜態方法
2、與其配套使用的關鍵字是Virtual、abstract、Override。
3、不能使用修飾符 new、static、virtual 或 abstract 來修改 override 方法。
?
二、new:new關鍵字可以在派生類中隱藏基類的方法,也就說在使用派生類調用的方法是New關鍵字新定義出來的方法,而不是基類的方法。在不使用New關鍵字來隱藏基類方法也是可以的,編譯器會出現一個警告,提示如果有意去隱藏基類的方法,請使用New關鍵字修飾。
可以對基類的虛方法、普通方法進行操作
三、Virtual:允許在派生類中重寫這些對象,默認情況下,方法是非虛擬的,不可以重寫。virtual關鍵字不可以與static、abstract、private、override一起使用。Virtual關鍵字和override緊密不可分的,如果要實現Virtual方法就必須要使用override或new關鍵字(new和override產生的機理不同)。
四、下面一個小例子進行講解,耐心看完,一目了然。
class A { public virtual void Func() // 注意virtual,表明這是一個虛擬函數 { Console.WriteLine("Func In A"); } } class B : A // 注意B是從A類繼承,所以A是父類,B是子類 { public override void Func() // 注意override ,表明重新實現了虛函數 { Console.WriteLine("Func In B"); } } class C : B // 注意C是從B類繼承,所以B是父類,C是子類 { } class D : A // 注意D是從A類繼承,所以A是父類,D是子類 { public new void Func() // 注意new ,表明覆蓋父類里的同名類,而不是重新實現 { Console.WriteLine("Func In D"); } } class Program { static void Main(string[] args) { A a; // 定義一個a這個A類的對象.這個A就是a的申明類 A b; // 定義一個b這個A類的對象.這個A就是b的申明類 A c; // 定義一個c這個A類的對象.這個A就是c的申明類 A d; // 定義一個d這個A類的對象.這個A就是d的申明類 a = new A(); // 實例化a對象,A是a的實例類 b = new B(); // 實例化b對象,B是b的實例類 c = new C(); // 實例化c對象,C是c的實例類 d = new D(); // 實例化d對象,D是d的實例類 a.Func(); // 執行a.Func:1.先檢查申明類A 2.檢查到是虛擬方法 3.轉去檢查實例類A,就為本身 4.執行實例類A中的方法 5.輸出結果 Func In A b.Func(); // 執行b.Func:1.先檢查申明類A 2.檢查到是虛擬方法 3.轉去檢查實例類B,有重載的 4.執行實例類B中的方法 5.輸出結果 Func In B c.Func(); // 執行c.Func:1.先檢查申明類A 2.檢查到是虛擬方法 3.轉去檢查實例類C,無重載的 4.轉去檢查類C的父類B,有重載的 5.執行父類B中的Func方法 5.輸出結果 Func In B d.Func(); // 執行d.Func:1.先檢查申明類A 2.檢查到是虛擬方法 3.轉去檢查實例類D,無重載的(這個地方要注意了,雖然D里有實現Func(),但沒有使用override關鍵字,所以不會被認為是重載) 4.轉去檢查類D的父類A,就為本身 5.執行父類A中的Func方法 5.輸出結果 Func In A D d1 = new D(); d1.Func(); // 執行D類里的Func(),輸出結果 Func In D Console.ReadLine(); } }?
?1、首先檢查的都是申明類
2、如果申明類是虛方法,則去檢查實例類
3、如果實例類沒實現,則使用父類中的虛方法。(優先級最后)
4、new的時候,雖然繼承類中也有同名方法,但是已經與父類那個沒有關系。故也不會調用到這個方法。除非是以子類申明的對象才能調用的到。
?
轉載于:https://www.cnblogs.com/xyang/archive/2012/05/08/2490092.html
總結
以上是生活随笔為你收集整理的实例讲解override和new的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tableau bug合集1:无法展示e
- 下一篇: [转+整理]十道海量数据处理面试题与十个