自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C# override重寫與new隱藏的區(qū)別

開發(fā) 后端
C# override重寫,是指對(duì)父類中的虛方法(標(biāo)記virtual)或抽象方法(標(biāo)記為abstract)進(jìn)行重寫。本文介紹了C# override重寫與new隱藏的區(qū)別,供大家參考。

C#比java多一個(gè)new隱藏的功能。C# override重寫相當(dāng)于java中沒有關(guān)鍵字的方法重寫。所以java中方法是沒有隱藏功能的。

C# override重寫,是指對(duì)父類中的虛方法(標(biāo)記virtual)或抽象方法(標(biāo)記為abstract)進(jìn)行重寫,實(shí)現(xiàn)新的功能,它必須與父類方法的簽名完全一致,而且與父類方法的可訪問性也必須一致 new隱藏,是指在子類中重新定義一個(gè)簽名與父類的方法相同的方法,這個(gè)方法可以不用new修飾,只是編譯時(shí)會(huì)彈出一個(gè)警告信息:如果是有意隱藏,請(qǐng)使用關(guān)鍵字new。

  1. using System;     
  2. public class Test      
  3. {     
  4.     public static void Main(String[] args){     
  5.         A a=new B();      
  6.         Console.Write(a.getVal()); // 輸出:A 雖然實(shí)例是B,但是執(zhí)行的卻是A的方法     
  7.     
  8.         a=new C();      
  9.         Console.Write(a.getVal()); // 輸出:C 實(shí)例是C,而且C重寫的A的方法,所以執(zhí)行C的方法     
  10.     
  11.         B b=new B();      
  12.         Console.Write(b.getVal()); // 輸出:B 只有定義和實(shí)例都是B,才執(zhí)行B的方法     
  13.     }      
  14. }     
  15. class A     
  16. {     
  17.     // 要允許子類重寫,方法必須標(biāo)識(shí)為virtual 或 abstract     
  18.     public virtual String getVal(){      
  19.         return "A";      
  20.     }      
  21. }      
  22. class B : A     
  23. {     
  24.     // 隱藏父類方法 用new標(biāo)識(shí),不標(biāo)識(shí)時(shí)會(huì)出現(xiàn)編譯警告,不影響使用     
  25.     public new String getVal(){      
  26.         return "B";      
  27.     }      
  28. }      
  29. class C : A     
  30. {     
  31.     // 重寫方法 必須用override標(biāo)識(shí)     
  32.     public override String getVal(){      
  33.         return "C";      
  34.     }      
  35. }    

而在Java中,不存在隱藏父類方法這一概念,Java只有重寫方法這一概念,同樣的代碼,在Java中執(zhí)行和C#中執(zhí)行截然不同:

  1. class test     
  2. {     
  3.     public static void main(String[] args)     
  4.     {     
  5.         A a=new B();      
  6. // 輸出:B  實(shí)例是B,執(zhí)行的也是B的方法(在C#中,此時(shí)應(yīng)該輸出A)     
  7.         System.out.println(a.getVal());      
  8.          a=new A();      
  9. // 輸出:A 只有定義和實(shí)例都是A,才執(zhí)行A的方法     
  10.         System.out.println(a.getVal());      
  11.     }     
  12. }     
  13. class A     
  14. {     
  15.     public String getVal(){      
  16.         return "A";      
  17.     }      
  18. }      
  19. class B extends A     
  20. {     
  21.     public String getVal(){      
  22.         return "B";      
  23.     }      
  24. }    

好了,C# override重寫與new隱藏的區(qū)別就介紹到這里。

【編輯推薦】

  1. 學(xué)習(xí)C#消息:循序漸進(jìn)
  2. 解惑答疑:C#委托和事件
  3. 學(xué)習(xí)C#實(shí)現(xiàn)HTTP協(xié)議:多線程文件傳輸
  4. 進(jìn)一步接觸C#委托與事件
  5. 淺析四種C#轉(zhuǎn)換的區(qū)別
責(zé)任編輯:book05 來源: cnblogs
相關(guān)推薦

2009-08-25 17:15:50

C#隱藏C#重寫C#重載

2009-08-21 14:22:22

C# new和over

2009-08-26 14:54:23

C# new和over

2025-02-13 09:32:12

C#重寫override

2009-08-24 17:45:39

Java與C#的區(qū)別

2009-08-18 12:23:38

2009-08-27 11:21:36

C# override

2009-08-13 17:30:30

C#構(gòu)造函數(shù)

2009-09-01 16:19:57

C# new()約束

2017-09-30 09:10:21

Java重寫變量

2009-09-04 11:35:05

C#方法重寫

2020-02-28 09:00:00

ObjectC#編程語言

2009-08-31 09:19:31

c#隱藏窗口

2011-05-24 16:46:48

mallocfreenew

2011-06-02 13:28:17

OverloadOverride

2009-08-11 14:16:38

C# New運(yùn)算符

2009-08-27 13:06:13

C# new修飾符

2011-06-14 12:27:38

C#C++

2013-05-23 17:21:16

C#

2010-07-12 09:07:30

C#
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)