1. 程式人生 > >C#中的overrid和new修飾符區別(代碼)

C#中的overrid和new修飾符區別(代碼)

之間 using stat ide post 不同的 虛擬 spa 代碼

在C#的繼承中嘗嘗會用到相關的修飾詞:override和new。這兩個修飾符都可以在新的子類中,重寫同名的父類方法。

override: 擴展或修改繼承的方法、屬性、索引器或事件的抽象或虛擬實現需要使用到。

new:在用作聲明修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。 隱藏繼承的成員時,該成員的派生版本將替換基類版本。

以上是這兩個修飾符的解釋。對於這兩者之間的區別之類的說法,其實網上找到的有很多,大多都是些概念性的東西。我這裏主要是對於,自己測試的代碼和大家分享下。

 1 using System;
 2 
 3 public class BaseClass{
4 public virtual void ShowA(){ 5 Console.WriteLine("A"); 6 } 7 8 public void ShowB(){ 9 Console.WriteLine("B"); 10 } 11 12 public void ShowAB(){ 13 ShowA(); 14 ShowB(); 15 } 16 } 17 18 public class TestClass:BaseClass{ 19 public override void ShowA(){ 20 Console.WriteLine("
AA"); 21 } 22 23 public new void ShowB(){ 24 Console.WriteLine("BB"); 25 } 26 } 27 28 public class Example 29 { 30 public static void Main() 31 { 32 TestClass test = new TestClass(); 33 test.ShowA(); 34 test.ShowB(); 35 test.ShowAB(); 36 37 BaseClass test1 = new
TestClass(); 38 test.ShowA(); 39 test.ShowB(); 40 test.ShowAB(); 41 42 Console.ReadLine(); 43 Console.WriteLine("運行結束"); 44 } 45 }

輸出結果如下:

技術分享圖片

可以看出,override相當於修改的父類的方法,對父類方法進行了重寫。在父類方法中調用時,同樣也是會調用到這個已經重寫過得類。override重寫的是父類地址下的方法實現信息。

對於new,對父類中的方法沒有產生影響,當調用父類方法時,還是會執行父類的方法。調用子類方法時,則調用子類方法。只是方法的名字相同,從而造成了子類對父類的方法造成了一種隱藏的特性。new相當於重新開辟了新的方法實現位置,子類與父類方法的地址是不同的。

C#中的overrid和new修飾符區別(代碼)