国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C# 讀書筆記之訪問虛方法、重寫方法和隱藏方法

2019-11-17 03:24:43
字體:
來源:轉載
供稿:網友

C# 讀書筆記之訪問虛方法、重寫方法和隱藏方法

C#允許派生類中的方法與基類中方法具有相同的簽名:基類中使用關鍵字virtual定義虛方法;然后派生類中使用關鍵字override來重寫方法,或使用關鍵字new來覆蓋方法(隱藏方法)。

重寫方法用相同的簽名重寫所繼承的虛方法。虛方法聲明用于引入新方法,而重寫方法或隱藏方法聲明則是用于使現有的繼承虛方法專用化(通過提供該方法的新實現)

注意:如果簽名相同的方法在基類和派生類都進行了聲明,但該方法沒有聲明為virtual和override/new,則派生類方法就會隱藏基類方法,但系統編譯時會產生警告信息。因為隱藏方法會存在為給定類的實例調用錯誤方法的危險,故應該顯示地定義隱藏方法。

調用虛方法時,將首先檢查該對象的運行時類型,并調用派生類中的該重寫成員。如果沒有派生類重寫該成員,則調用其原始數據。

默認情況下,C#方法是非虛擬的。不能重寫非虛方法,重寫非虛方法將導致編譯錯誤。

除了類方法外,還可以使用virtual關鍵字其他類成員以定義虛成員,包括屬性【無參屬性】、索引器【含參屬性】或事件聲明。虛擬成員的實現可在派生類使用關鍵字override來重寫;或使用關鍵字new來覆蓋。

注意:virtual 修飾符不能與static、abstract、PRivate或override修飾符一起使用。

例:

虛方法,重寫方法和隱藏方法示例:Dimensions類包含x,y兩個坐標和Area()虛方法。Dimensions類的派生類(Circle、Cylinder和Sphere)均重寫了基類的虛方法Area()以實現不同圖形表面積的計算。調用虛方法Area()時,將根據此方法關聯的運行時對象調用適當的Area()實現,為每個圖形計算并顯示適當的面積。

   1:  namespace Consoleapplication2
   2:  {
   3:  
   4:  
   5:  
   6:      public class Dimensions
   7:      {
   8:  
   9:          public const double PI = Math.PI;
  10:          protected double x, y;
  11:          public Dimensions()
  12:          {
  13:  
  14:          }
  15:  
  16:          public Dimensions(double x, double y)
  17:          {
  18:              this.x = x;
  19:              this.y = y;
  20:          }
  21:  
  22:          public virtual double Area()
  23:          {
  24:              return x * y;
  25:          }
  26:  
  27:      }
  28:  
  29:      public class Circle : Dimensions          //派生類:圓
  30:      {
  31:          public Circle(double r)
  32:              : base(r, 0)
  33:          {
  34:  
  35:          }
  36:  
  37:          public override double Area()
  38:          {
  39:              //園的面積
  40:              return PI * x * x;
  41:          }
  42:      }
  43:      public class Sphere : Dimensions          //派生類:球體
  44:      {
  45:          public Sphere(double r)
  46:              : base(r, 0)
  47:          {
  48:  
  49:          }
  50:  
  51:          public override double Area()
  52:          {
  53:              //球體的表面積
  54:              return 4 * PI * x * x;
  55:          }
  56:      }
  57:      public class Cylinder : Dimensions          //派生類:圓柱體
  58:      {
  59:          public Cylinder(double r)
  60:              : base(r, 0)
  61:          {
  62:  
  63:          }
  64:  
  65:          public override double Area()
  66:          {
  67:              //圓柱體的表面積
  68:              return 2 * PI * x * x + 2 * PI * x * y;
  69:          }
  70:      }
  71:  
  72:      public class Program
  73:      {
  74:  
  75:  
  76:          static void Main(string[] args)
  77:          {
  78:              double r = 3.0, h = 5.0;
  79:              Dimensions c = new Circle(r);           //圓
  80:  
  81:              Dimensions s = new Sphere(r);           //球體
  82:  
  83:  
  84:              Dimensions l = new Cylinder(r);         //圓柱體
  85:  
  86:              //顯示各種不同形狀的表面積
  87:  
  88:              Console.WriteLine("圓的面積={0:f2}",c.Area());
  89:              Console.WriteLine("球體的面積={0:f2}", s.Area());
  90:              Console.WriteLine("圓柱體的面積={0:f2}", l.Area());
  91:              Console.ReadKey();
  92:          }
  93:      }
  94:  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 改则县| 阿巴嘎旗| 喀喇沁旗| 耒阳市| 怀化市| 奉新县| 油尖旺区| 昭觉县| 吐鲁番市| 河西区| 古交市| 玛多县| 温宿县| 大竹县| 汶上县| 奈曼旗| 玉树县| 海安县| 齐河县| 茂名市| 昌江| 沙田区| 大同市| 霍林郭勒市| 仪征市| 青海省| 南康市| 股票| 南投市| 哈巴河县| 依安县| 呼玛县| 新闻| 新干县| 靖远县| 喀什市| 共和县| 靖西县| 宜川县| 宜川县| 扶绥县|