C#中overrid和new修飾符有什么不同
在C#的繼承中嘗嘗會用到相關(guān)的修飾詞:override和new。這兩個修飾符都可以在新的子類中,重寫同名的父類方法。
override: 擴展或修改繼承的方法、屬性、索引器或事件的抽象或虛擬實現(xiàn)需要使用到。
new:在用作聲明修飾符時,new 關(guān)鍵字可以顯式隱藏從基類繼承的成員。 隱藏繼承的成員時,該成員的派生版本將替換基類版本。
以上是這兩個修飾符的解釋。對于這兩者之間的區(qū)別之類的說法,其實網(wǎng)上找到的有很多,大多都是些概念性的東西。我這里主要是對于,自己測試的代碼和大家分享下。
using System; public class BaseClass{ public virtual void ShowA(){ Console.WriteLine("A"); } public void ShowB(){ Console.WriteLine("B"); } public void ShowAB(){ ShowA(); ShowB(); } } public class TestClass:BaseClass{ public override void ShowA(){ Console.WriteLine("AA"); } public new void ShowB(){ Console.WriteLine("BB"); } } public class Example { public static void Main() { TestClass test = new TestClass(); test.ShowA(); test.ShowB(); test.ShowAB(); BaseClass test1 = new TestClass(); test.ShowA(); test.ShowB(); test.ShowAB(); Console.ReadLine(); Console.WriteLine("運行結(jié)束"); } }
輸出結(jié)果如下:
可以看出,override相當于修改的父類的方法,對父類方法進行了重寫。在父類方法中調(diào)用時,同樣也是會調(diào)用到這個已經(jīng)重寫過得類。override重寫的是父類地址下的方法實現(xiàn)信息。
對于new,對父類中的方法沒有產(chǎn)生影響,當調(diào)用父類方法時,還是會執(zhí)行父類的方法。調(diào)用子類方法時,則調(diào)用子類方法。只是方法的名字相同,從而造成了子類對父類的方法造成了一種隱藏的特性。new相當于重新開辟了新的方法實現(xiàn)位置,子類與父類方法的地址是不同的。
總結(jié)
以上所述是小編給大家介紹的C#中overrid和new修飾符有什么不同,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
unity通過Mesh網(wǎng)格繪制圖形(三角形、正方體、圓柱)
這篇文章主要為大家詳細介紹了unity通過Mesh網(wǎng)格繪制圖形:三角形、正方體、圓柱,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11C#在后臺運行操作(BackgroundWorker用法)示例分享
BackgroundWorker類允許在單獨的專用線程上運行操作。如果需要能進行響應的用戶界面,而且面臨與這類操作相關(guān)的長時間延遲,則可以使用BackgroundWorker類方便地解決問題,下面看示例2013-12-12