您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)C#如何改寫方法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
C#改寫方法
面向?qū)ο笤O(shè)計(jì)的重要原則就是多態(tài)性。不要理會(huì)高深的理論,多態(tài)性意味著:當(dāng)基類程序員已設(shè)計(jì)好用于改寫的方法時(shí),在派生類中,你就可以重定義(改寫)基類的方法。基類程序員可以用 virtual 關(guān)鍵字設(shè)計(jì)方法:
virtual void CanBOverridden()
當(dāng)從基類派生時(shí),所有你要做的就是在新方法中加入override關(guān)鍵字:
override void CanBOverridden()
當(dāng)改寫一個(gè)基類的方法時(shí),你必須明白,不能改變方法的訪問(wèn)屬性——在這章的后面,你會(huì)學(xué)到更多關(guān)于訪問(wèn)修飾符的知識(shí)。
除了改寫基類方法的事實(shí)外,還有另一個(gè)甚至更重要的改寫特性。當(dāng)把派生類強(qiáng)制轉(zhuǎn)換成基類類型并接著調(diào)用虛擬方法時(shí),被調(diào)用的是派生類的方法而不是基類的方法。
((BaseClass)DerivedClassInstance)。CanBOverridden();
為了演示虛擬方法的概念,顯示如何創(chuàng)建一個(gè)三角形基類,它擁有一個(gè)可以被改寫的成員方法(ComputeArea)。
using System; class Triangle { public virtual double ComputeArea(int a, int b, int c) { // Heronian formula double s = (a + b + c) / 2.0; double dArea = Math.Sqrt(s*(s-a)*(s-b)*(s-c)); return dArea; } } class RightAngledTriangle:Triangle { public override double ComputeArea(int a, int b, int c) { double dArea = a*b/2.0; return dArea; } } class TriangleTestApp { public static void Main() { Triangle tri = new Triangle(); Console.WriteLine(tri.ComputeArea(2, 5, 6)); RightAngledTriangle rat = new RightAngledTriangle(); Console.WriteLine(rat.ComputeArea(3, 4, 5)); } }
基類Triangle定義了方法ComputeArea.它采用三個(gè)參數(shù),返回一個(gè)double結(jié)果,且具有公共訪問(wèn)性。從Triangle類派生出的是RightAngledTriangle,它改寫了ComputeArea 方法,并實(shí)現(xiàn)了自己的面積計(jì)算公式。兩個(gè)類都被實(shí)例化,且在命名為TriangleTestApp的應(yīng)用類的Main() 方法中得到驗(yàn)證。
我漏了解釋第14行:
class RightAngledTriangle : Triangle
在類語(yǔ)句中冒號(hào)(:)表示RightAngledTriangle從類 Triangle派生。那就是你所必須要做的,以讓C#知道你想把Triangle當(dāng)作RightAngledTriangle的基類。
當(dāng)仔細(xì)觀察直角三角形的ComputeArea方法時(shí),你會(huì)發(fā)現(xiàn)第3個(gè)參數(shù)并沒(méi)有用于計(jì)算。但是,利用該參數(shù)就可以驗(yàn)證是否是"直角"。
class RightAngledTriangle:Triangle { public override double ComputeArea(int a, int b, int c) { const double dEpsilon = 0.0001; double dArea = 0; if (Math.Abs((a*a + b*b - c*c)) > dEpsilon) { dArea = base.ComputeArea(a,b,c); } else { dArea = a*b/2.0; } return dArea; } }
該檢測(cè)簡(jiǎn)單地利用了畢達(dá)哥拉斯公式,對(duì)于直角三角形,檢測(cè)結(jié)果必須為0.如果結(jié)果不為0,類就調(diào)用它基類的ComputeArea來(lái)實(shí)現(xiàn)。
dArea = base.ComputeArea(a,b,c);
例子的要點(diǎn)為:通過(guò)顯式地利用基類的資格檢查,你就能輕而易舉地調(diào)用基類實(shí)現(xiàn)C#改寫方法。當(dāng)你需要實(shí)現(xiàn)其在基類中的功能,而不愿意在C#改寫方法中重復(fù)它時(shí),這就非常有幫助。
感謝各位的閱讀!關(guān)于“C#如何改寫方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。