在c#的繼承中嘗嘗會用到相關的修飾詞:override和new。這兩個修飾符都可以在新的子類中,重寫同名的父類方法。
override: 擴展或修改繼承的方法、屬性、索引器或事件的抽象或虛擬實現需要使用到。
new:在用作聲明修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。 隱藏繼承的成員時,該成員的派生版本將替換基類版本。
以上是這兩個修飾符的解釋。對于這兩者之間的區別之類的說法,其實網上找到的有很多,大多都是些概念性的東西。我這里主要是對于,自己測試的代碼和大家分享下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
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( "運行結束" ); } } |
輸出結果如下:
可以看出,override相當于修改的父類的方法,對父類方法進行了重寫。在父類方法中調用時,同樣也是會調用到這個已經重寫過得類。override重寫的是父類地址下的方法實現信息。
對于new,對父類中的方法沒有產生影響,當調用父類方法時,還是會執行父類的方法。調用子類方法時,則調用子類方法。只是方法的名字相同,從而造成了子類對父類的方法造成了一種隱藏的特性。new相當于重新開辟了新的方法實現位置,子類與父類方法的地址是不同的。
總結
以上所述是小編給大家介紹的c#中overrid和new修飾符有什么不同,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://www.cnblogs.com/yueye/archive/2018/02/11/8442445.html