成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# new和override簡單描述

開發 后端
這里介紹C# new和override,重寫屬性聲明必須指定與繼承屬性完全相同的訪問修飾符、類型和名稱,并且重寫屬性必須是虛擬的、抽象的或重寫的。

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

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

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

可以稍微歸納一下:

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

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

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

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

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

為基類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. }  

【編輯推薦】

  1. C# GreetPeople方法
  2. C# Hashtable對象分析
  3. 常用C# Arraylist的介紹
  4. C# Observer設計模式
  5. C#交錯數組淺析
責任編輯:佚名 來源: 博客園
相關推薦

2009-08-21 14:22:22

C# new和over

2009-08-19 10:09:21

C#和C++

2009-08-31 18:32:01

C# ListBoxE

2009-08-28 15:28:22

C# overridenew隱藏

2009-08-28 11:22:11

C#裝箱和拆箱

2009-08-27 10:01:52

C#自動屬性

2009-09-01 17:08:35

C# Color枚舉

2009-09-03 16:55:58

C#引用類型

2009-09-07 15:31:49

C#支持事件

2009-08-20 16:45:03

C#哈希值

2009-09-01 18:25:32

C#結構實例

2009-09-07 14:33:02

C# switch語句

2009-08-21 17:31:58

C#垃圾回收

2009-08-13 17:58:34

C#存儲過程

2009-09-02 13:01:11

C#多路廣播

2009-09-16 09:01:40

C#多維數組

2009-08-28 09:30:48

C#命名屬性

2009-09-01 16:19:57

C# new()約束

2009-08-13 17:04:09

C#語言C#程序

2009-08-31 17:53:20

C#實現索引器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲性人人天天夜夜摸 | 欧美在线视频一区二区 | 欧美中文字幕一区二区 | 天天操夜夜艹 | 亚洲视频一区 | 欧美日韩三区 | 成人免费视频网站在线观看 | 麻豆一区二区三区精品视频 | 久久逼逼 | 成人免费小视频 | 亚洲一级黄色 | 免费在线观看一区二区三区 | 91亚洲免费 | 日本在线免费视频 | 中文字幕日本一区二区 | 九色在线 | 亚洲a在线观看 | 国产精品一区二区在线 | 成人黄视频在线观看 | 色婷婷av一区二区三区软件 | 久久九七 | 一级片在线观看 | 在线观看涩涩视频 | 日韩精品 电影一区 亚洲 | 国产综合久久 | 亚洲精品久久久久avwww潮水 | 国产在线精品一区 | 自拍偷拍中文字幕 | 午夜久久久久 | 精品不卡 | 色小姐综合网 | 美女国产精品 | 五月婷婷婷 | 亚洲高清一区二区三区 | 精品在线一区二区 | 亚洲欧美中文字幕 | 欧美精品在线免费观看 | 国产精品一区一区三区 | 黄色大片在线视频 | 久久国产99 | 亚洲综合一区二区三区 |