概述C# virtual修飾符
摘要:C#是繼C++和Java語言后的又一面向?qū)ο蟮恼Z言,在語法結(jié)構(gòu),C#有很多地方和C++及Java相似,但是又不同于它們,其中一些關(guān)鍵特別需要引起我們的注意。
C# virtual修飾符用于修改方法或?qū)傩缘穆暶?,在這種情況下,方法或?qū)傩员环Q作虛擬成員。虛擬成員的實現(xiàn)可由派生類中的重寫成員更改。
調(diào)用虛方法時,將為重寫成員檢查該對象的運行時類型。將調(diào)用大部分派生類中的該重寫成員,如果沒有派生類重寫該成員,則它可能是原始成員。
默認(rèn)情況下,方法是非虛擬的。不能重寫非虛方法。
不能將C# virtual修飾符與以下修飾符一起使用:
static abstract override
除了聲明和調(diào)用語法不同外,虛擬屬性的行為與抽象方法一樣。
◆在靜態(tài)屬性上使用C# virtual修飾符是錯誤的。
◆通過包括使用 override 修飾符的屬性聲明,可在派生類中重寫虛擬繼承屬性。 
上邊是微軟的官方說明,個人認(rèn)為,如果自己覺得這個方法通用性不強就用virtual去聲明這個方法,然后用戶可以根據(jù)自己不同的情況首先繼承它然后對它進(jìn)行重載。下面我們來看一下微軟給的例子:
示例
在該示例中,Dimensions 類包含 x 和 y 兩個坐標(biāo)和 Area() 虛方法。不同的形狀類,如 Circle、Cylinder 和 Sphere 繼承 Dimensions 類,并為每個圖形計算表面積。每個派生類都有各自的 Area() 重寫實現(xiàn)。根據(jù)與此方法關(guān)聯(lián)的對象,通過調(diào)用正確的 Area() 實現(xiàn),該程序為每個圖形計算并顯示正確的面積。
- // 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());
 - }
 - }
 
【編輯推薦】















 
 
 


 
 
 
 