您好,登錄后才能下訂單哦!
C# 中virtual修飾符的作用是什么,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
C# virtual修飾符用于修改方法或?qū)傩缘穆暶?,在這種情況下,方法或?qū)傩员环Q作虛擬成員。虛擬成員的實(shí)現(xiàn)可由派生類中的重寫成員更改。
調(diào)用虛方法時,將為重寫成員檢查該對象的運(yùn)行時類型。將調(diào)用大部分派生類中的該重寫成員,如果沒有派生類重寫該成員,則它可能是原始成員。
默認(rèn)情況下,方法是非虛擬的。不能重寫非虛方法。
不能將C# virtual修飾符與以下修飾符一起使用:
static abstract override
除了聲明和調(diào)用語法不同外,虛擬屬性的行為與抽象方法一樣。
◆在靜態(tài)屬性上使用C# virtual修飾符是錯誤的。
◆通過包括使用 override 修飾符的屬性聲明,可在派生類中重寫虛擬繼承屬性。
上邊是微軟的官方說明,個人認(rèn)為,如果自己覺得這個方法通用性不強(qiáng)就用virtual去聲明這個方法,然后用戶可以根據(jù)自己不同的情況首先繼承它然后對它進(jìn)行重載。下面我們來看一下微軟給的例子:
示例
在該示例中,Dimensions 類包含 x 和 y 兩個坐標(biāo)和 Area() 虛方法。不同的形狀類,如 Circle、Cylinder 和 Sphere 繼承 Dimensions 類,并為每個圖形計(jì)算表面積。每個派生類都有各自的 Area() 重寫實(shí)現(xiàn)。根據(jù)與此方法關(guān)聯(lián)的對象,通過調(diào)用正確的 Area() 實(shí)現(xiàn),該程序?yàn)槊總€圖形計(jì)算并顯示正確的面積。
// cs_virtual_keyword.cs // Virtual and override using System; class TestClass { public class Dimensions { public const double pi = Math.PI; protected double x, y; public Dimensions() { } public Dimensions (double x, double y) { this.x = x; this.y = y; } public virtual double Area() { return x*y; } } public class Circle: Dimensions { public Circle(double r): base(r, 0) { } public override double Area() { return pi * x * x; } } class Sphere: Dimensions { public Sphere(double r): base(r, 0) { } public override double Area() { return 4 * pi * x * x; } } class Cylinder: Dimensions { public Cylinder(double r, double h): base(r, h) { } public override double Area() { return 2*pi*x*x + 2*pi*x*y; } } public static void Main() { double r = 3.0, h = 5.0; Dimensions c = new Circle(r); Dimensions s = new Sphere(r); Dimensions l = new Cylinder(r, h); // Display results: Console.WriteLine("Area of Circle = {0:F2}", c.Area()); Console.WriteLine("Area of Sphere = {0:F2}", s.Area()); Console.WriteLine("Area of Cylinder = {0:F2}", l.Area()); } }
看完上述內(nèi)容,你們掌握C# 中virtual修飾符的作用是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。