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

C#改寫方法學(xué)習(xí)筆記

開發(fā) 后端
這里介紹C#改寫方法,面向?qū)ο笤O(shè)計的重要原則就是多態(tài)性。不要理會高深的理論,多態(tài)性意味著:當(dāng)基類程序員已設(shè)計好用于改寫的方法時,在派生類中,你就可以重定義(改寫)基類的方法。

C#改寫方法

面向?qū)ο笤O(shè)計的重要原則就是多態(tài)性。不要理會高深的理論,多態(tài)性意味著:當(dāng)基類程序員已設(shè)計好用于改寫的方法時,在派生類中,你就可以重定義(改寫)基類的方法?;惓绦騿T可以用 virtual 關(guān)鍵字設(shè)計方法:

  1. virtual void CanBOverridden() 

當(dāng)從基類派生時,所有你要做的就是在新方法中加入override關(guān)鍵字:

  1. override void CanBOverridden() 

當(dāng)改寫一個基類的方法時,你必須明白,不能改變方法的訪問屬性——在這章的后面,你會學(xué)到更多關(guān)于訪問修飾符的知識。

除了改寫基類方法的事實外,還有另一個甚至更重要的改寫特性。當(dāng)把派生類強制轉(zhuǎn)換成基類類型并接著調(diào)用虛擬方法時,被調(diào)用的是派生類的方法而不是基類的方法。

  1. ((BaseClass)DerivedClassInstance)。CanBOverridden(); 

為了演示虛擬方法的概念,顯示如何創(chuàng)建一個三角形基類,它擁有一個可以被改寫的成員方法(ComputeArea)。

  1. using System;  
  2. class Triangle  
  3. {  
  4. public virtual double ComputeArea(int a, int b, int c)  
  5. {  
  6. // Heronian formula  
  7. double s = (a + b + c) / 2.0;  
  8. double dArea = Math.Sqrt(s*(s-a)*(s-b)*(s-c));  
  9. return dArea;  
  10. }  
  11. }  
  12. class RightAngledTriangle:Triangle  
  13. {  
  14. public override double ComputeArea(int a, int b, int c)  
  15. {  
  16. double dArea = a*b/2.0;  
  17. return dArea;  
  18. }  
  19. }  
  20. class TriangleTestApp  
  21. {  
  22. public static void Main()  
  23. {  
  24. Triangle tri = new Triangle();  
  25. Console.WriteLine(tri.ComputeArea(2, 5, 6));  
  26. RightAngledTriangle rat = new RightAngledTriangle();  
  27. Console.WriteLine(rat.ComputeArea(3, 4, 5));  
  28. }  

基類Triangle定義了方法ComputeArea.它采用三個參數(shù),返回一個double結(jié)果,且具有公共訪問性。從Triangle類派生出的是RightAngledTriangle,它改寫了ComputeArea 方法,并實現(xiàn)了自己的面積計算公式。兩個類都被實例化,且在命名為TriangleTestApp的應(yīng)用類的Main() 方法中得到驗證。

我漏了解釋第14行:

class RightAngledTriangle : Triangle

在類語句中冒號(:)表示RightAngledTriangle從類 Triangle派生。那就是你所必須要做的,以讓C#知道你想把Triangle當(dāng)作RightAngledTriangle的基類。

當(dāng)仔細(xì)觀察直角三角形的ComputeArea方法時,你會發(fā)現(xiàn)第3個參數(shù)并沒有用于計算。但是,利用該參數(shù)就可以驗證是否是"直角"。

  1. class RightAngledTriangle:Triangle  
  2. {  
  3. public override double ComputeArea(int a, int b, int c)  
  4. {  
  5. const double dEpsilon = 0.0001;  
  6. double dArea = 0;  
  7. if (Math.Abs((a*a + b*b - c*c)) > dEpsilon)  
  8. {  
  9. dArea = base.ComputeArea(a,b,c);  
  10. }  
  11. else  
  12. {  
  13. dArea = a*b/2.0;  
  14. }  
  15. return dArea;  
  16. }  

該檢測簡單地利用了畢達(dá)哥拉斯公式,對于直角三角形,檢測結(jié)果必須為0.如果結(jié)果不為0,類就調(diào)用它基類的ComputeArea來實現(xiàn)。

dArea = base.ComputeArea(a,b,c);

例子的要點為:通過顯式地利用基類的資格檢查,你就能輕而易舉地調(diào)用基類實現(xiàn)C#改寫方法。當(dāng)你需要實現(xiàn)其在基類中的功能,而不愿意在C#改寫方法中重復(fù)它時,這就非常有幫助。

【編輯推薦】

  1. 介紹Mono C#編譯器
  2. C#運算符重載學(xué)習(xí)總結(jié)
  3. 概述C#語言的結(jié)構(gòu)體
  4. C#遺傳算法學(xué)習(xí)筆記
  5. 討論C#分部方法
責(zé)任編輯:佚名 來源: 51CTO.com
相關(guān)推薦

2009-08-27 09:27:49

C#擴展方法

2009-08-31 16:51:11

C# Main()方法

2009-08-21 18:01:32

C#匿名方法

2009-08-12 17:32:44

C#反射方法

2009-08-14 09:41:03

C#遺傳算法

2009-08-12 15:50:40

C# ListBox

2009-08-20 15:02:57

C# If語句

2009-08-12 09:28:36

C# WiteOne

2009-08-13 18:21:52

C#學(xué)習(xí)筆記

2009-08-21 17:53:28

C#查詢結(jié)果

2009-08-24 14:30:49

C# WMI封裝

2009-08-25 15:26:03

C#調(diào)用ImOK

2009-08-12 10:46:54

C#命名空間

2009-08-26 10:48:44

C# SQL命令

2009-08-31 15:27:33

C# TreeView

2009-08-24 15:46:46

C# SmartPho

2009-12-03 09:59:34

2009-08-13 11:10:32

C#基礎(chǔ)概念

2009-08-27 16:53:01

C#委托C#事件

2009-09-02 16:50:08

C#改寫WM_GETT
點贊
收藏

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