日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#new和override簡單描述

C#語言有很多值得學(xué)習(xí)的地方,這里我們主要介紹C# new和override,包括介紹virtual 修飾符、new 修飾符等方面。

成都創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元西山做網(wǎng)站,已為上家服務(wù),為西山各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575

C#支持單繼承,說到繼承就不得不說virtual,C# new和override這三個關(guān)鍵詞,靈活正確的使用這三個關(guān)鍵詞,可以使程序結(jié)構(gòu)更加清晰,代碼重用性更高。
  
以下是msdn中對virtual,C# new和override的定義:
使用 new 修飾符顯式隱藏從基類繼承的成員。若要隱藏繼承的成員,請使用相同名稱在派生類中聲明該成員,并用 new 修飾符修飾它。
virtual 關(guān)鍵字用于修改方法或?qū)傩缘穆暶鳎谶@種情況下,方法或?qū)傩员环Q作虛擬成員。虛擬成員的實現(xiàn)可由派生類中的重寫成員更改。調(diào)用虛方法時,將為重寫成員檢查該對象的運行時類型。將調(diào)用大部分派生類中的該重寫成員,如果沒有派生類重寫該成員,則它可能是原始成員。默認情況下,方法是非虛擬的。不能重寫非虛方法。

不能將virtual 修飾符與以下修飾符一起使用,使用 override 修飾符來修改方法、屬性、索引器或事件。重寫方法提供從基類繼承的成員的新實現(xiàn)。由重寫聲明重寫的方法稱為重寫基方法。重寫基方法必須與重寫方法具有相同的簽名。不能重寫非虛方法或靜態(tài)方法。重寫基方法必須是虛擬的、抽象的或重寫的。重寫聲明不能更改虛方法的可訪問性。重寫方法和虛方法必須具有相同的訪問級修飾符。
  
不能使用下列修飾符修改重寫方法:
重寫屬性聲明必須指定與繼承屬性完全相同的訪問修飾符、類型和名稱,并且重寫屬性必須是虛擬的、抽象的或重寫的。

可以稍微歸納一下:

1. 對于基類中說明為虛的方法則必須在派生類中C# new和override(注:對于基類的虛方法,雖然你在派生類中即不new也不override,但系統(tǒng)還是會提示你添關(guān)鍵字。否則系統(tǒng)將視其為隱藏。我們的意思是一樣的,但總覺得明明確確寫上關(guān)鍵字還是好些)。

2. 如果用基類指針指向派生類對象的方式,動態(tài)匹配的源動力是virtual,而C# new和override都會阻止這種向下尋求匹配的行為,所以要使虛函數(shù)的性質(zhì)得已保持下去,就要隱藏基類的虛方法,即在派生類中隱藏基類虛方法時,同時加以virtual關(guān)鍵字,使在多層次繼承中能夠調(diào)用到對象自身的版本。

3.在多層次繼承中,三個關(guān)鍵字使用次序有限定,new沒有使用前提,即不管是普通方法、虛方法還是重寫了的方法。virtual的使用,在它的基類不能有函數(shù)簽名相同的方法,否則系統(tǒng)將提示添加new,即隱藏基類中的方法。virtual一般只出現(xiàn)一次,除非要在子類中隱藏父類的虛方法。

override的使用是為了重寫基類虛方法。

上面的描述都很抽象,對于初學(xué)者可能不好理解,下面我將用示例來說明這三個用法和區(qū)別:此程序在vs2005下調(diào)試通過。其中有三個類,分別

為基類BaseClass,繼承類InheritClass和繼承類的繼承類GrandsonClass代碼分別如下:

 
 
 
  1. //BaseClass.cs
  2. namespace NewVirtualOverride
  3. {
  4. class BaseClass
  5. {
  6. public BaseClass()
  7. {
  8. }
  9. public void Print()
  10. {
  11. Console.WriteLine("BaseClassPrint");
  12. }
  13. }
  14. }
  15. //InheritClass.cs
  16. namespace NewVirtualOverride
  17. {
  18. class InheritClass : BaseClass
  19. {
  20. public InheritClass():base()
  21. {
  22. }
  23. public void Print()
  24. {
  25. Console.WriteLine("InheritClassPrint");
  26. }
  27. }
  28. }
  29. //GrandsonClass.cs
  30. namespace NewVirtualOverride
  31. {
  32. class GrandsonClass : InheritClass
  33. {
  34. public GrandsonClass():base()
  35. {
  36. }
  37. public void Print()
  38. {
  39. Console.WriteLine("GrandsonClassPrint");
  40. }
  41. }
  42. }
  43. //最后是主程序Program:
  44. namespace NewVirtualOverride
  45. {
  46. class Program
  47. {
  48. static void Main(string[] args)
  49. {
  50. BaseClass baseclass = new BaseClass();
  51. baseclass.Print();
  52. InheritClass inheritClass = new InheritClass();
  53. inheritClass.Print();
  54. Console.ReadLine();
  55. }
  56. }
  57. }

網(wǎng)站題目:C#new和override簡單描述
分享地址:http://www.dlmjj.cn/article/dhdiipo.html