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

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

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

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

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

 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 }

 

輸出結果以下:blog

 

能夠看出,override至關於修改的父類的方法,對父類方法進行了重寫。在父類方法中調用時,一樣也是會調用到這個已經重寫過得類。override重寫的是父類地址下的方法實現信息。繼承

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

相關文章
相關標籤/搜索