C#中的Virtual、Override和new關鍵詞
2007/3/1 9:00:12

摘要:C#是繼C++和Java語言后的又一面向對象的語言,在語法結構,C#有很多地方和C++及Java相似,但是又不同于它們,其中一些關鍵特別需要引起我們的注意。
virtual 關鍵字用于修改方法或屬性的聲明,在這種情況下,方法或屬性被稱作虛擬成員。虛擬成員的實現可由派生類中的重寫成員更改。
調用虛方法時,將為重寫成員檢查該對象的運行時類型。將調用大部分派生類中的該重寫成員,如果沒有派生類重寫該成員,則它可能是原始成員。
默認情況下,方法是非虛擬的。不能重寫非虛方法。
不能將 virtual 修飾符與以下修飾符一起使用:
static  abstract  override
除了聲明和調用語法不同外,虛擬屬性的行為與抽象方法一樣。  在靜態屬性上使用 virtual 修飾符是錯誤的。  通過包括使用 override 修飾符的屬性聲明,可在派生類中重寫虛擬繼承屬性。 
上邊是微軟的官方說明,個人認為,如果自己覺得這個方法通用性不強就用virtual去聲明這個方法,然后用戶可以根據自己不同的情況首先繼承它然后對它進行重載。下面我們來看一下微軟給的例子:
    示例
在該示例中,Dimensions 類包含 x 和 y 兩個坐標和 Area() 虛方法。不同的形狀類,如 Circle、Cylinder 和 Sphere 繼承 Dimensions 類,并為每個圖形計算表面積。每個派生類都有各自的 Area() 重寫實現。根據與此方法關聯的對象,通過調用正確的 Area() 實現,該程序為每個圖形計算并顯示正確的面積。
1 // cs_virtual_keyword.cs
2 // Virtual and override
3 using System;
4 class TestClass
5 {
6    public class Dimensions
7    {
8      public const double pi = Math.PI;
9      protected double x, y;
10      public Dimensions()
11        {
12      }
13      public Dimensions (double x, double y)
14        {
15          this.x = x;
16          this.y = y;
17      }
18
19      public virtual double Area()
20        {
21          return x*y;
22      }
23    }
24
25    public class Circle: Dimensions
26    {
27      public Circle(double r): base(r, 0)
28        {
29      }
30
31      public override double Area()
32        {
33          return pi * x * x;
34      }
35    }
36
37    class Sphere: Dimensions
38    {
39      public Sphere(double r): base(r, 0)
40        {
41      }
42
43      public override double Area()
44        {
45          return 4 * pi * x * x;
46      }
47    }
48
49    class Cylinder: Dimensions
50    {
51      public Cylinder(double r, double h): base(r, h)
52        {
53      }
54
55      public override double Area()
56        {
57          return 2*pi*x*x + 2*pi*x*y;
58      }
59    }
60
61    public static void Main() 
62    {
63      double r = 3.0, h = 5.0;
64      Dimensions c = new Circle(r);
65      Dimensions s = new Sphere(r);
66      Dimensions l = new Cylinder(r, h);
67      // Display results:
68      Console.WriteLine("Area of Circle  = {0:F2}", c.Area());
69      Console.WriteLine("Area of Sphere  = {0:F2}", s.Area());
70      Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
71    }
72 }
輸出
Area of Circle  = 28.27
Area of Sphere  = 113.10
Area of Cylinder = 150.80
在前面的示例中,注意繼承的類 Circle、Sphere 和 Cylinder 都使用了初始化基類的構造函數,例如:
public Cylinder(double

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 精品久久久久久无码人妻| 97精品国产一区二区三区| 日韩精品久久久久久免费| 欧美巨大xxxx做受中文字幕| 国产在线98福利播放视频免费| 99免费在线观看视频| 成人欧美一区二区三区黑人| 国产亚洲欧美日韩在线观看不卡| **一级一级毛片免费观看| 大胸年轻继拇3在线观看| 中文字幕资源在线| 日韩精品一区二区三区中文版 | 高清欧美性暴力猛交| 国产精品你懂得| 91欧美一区二区三区综合在线| 女人扒开双腿让男人捅| 中文字幕乱码人妻一区二区三区 | 国产精品午夜剧场| 国产精品无码久久综合| 99久久人妻精品免费二区| 女人18毛片黄| 一区二区三区免费在线视频| 放荡的女按摩师2| 人妻av无码一区二区三区| 精品无码一区二区三区爱欲九九| 国产亚洲精品资源在线26U| 黄网站色视频免费观看| 国产欧美精品区一区二区三区 | 久久精品中文字幕第一页| 三级黄色在线看| 被女同桌调教成鞋袜奴脚奴| 国产真实伦在线视频免费观看| 91福利在线观看视频| 在线观看午夜亚洲一区| heisiav1| 好湿好大硬得深一点动态图| 三上悠亚伦理片| 成人动漫在线视频| 中文字幕在线免费看线人| 无码中文av有码中文a| 久久久久亚洲AV无码专区首|