程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中的abstract與virtual(2)

C#中的abstract與virtual(2)

編輯:關於C語言

使用 override 修飾符來修改方法、屬性、索引器或事件。重寫方法提供從基類繼承的成員的新實現。由重寫聲明重寫的方法稱為重寫基方法。重寫基方法必須與重寫方法具有相同的簽名。

不能重寫非虛方法或靜態方法。重寫基方法必須是虛擬的、抽象的或重寫的。

重寫聲明不能更改虛方法的可訪問性。重寫方法和虛方法必須具有相同的訪問級修飾符。

不能使用下列修飾符修改重寫方法:

new  static  virtual  abstract

重寫屬性聲明必須指定與繼承屬性完全相同的訪問修飾符、類型和名稱,並且重寫屬性必須是虛擬的、抽象的或重寫的。

using System;

namespace VitualMethod
{
   class BeiseClass
   {
     public void RealMethod()
     {
       Console.WriteLine(@"The ""RealMethod"" method of ""BeiseClass"" class!");
     }

    public virtual void ViutualMethod()
     {
       Console.WriteLine(@"The ""ViutualMethod"" method of ""BeiseClass""class!");
     }
   }

class NewAndOverride: BeiseClass
   {
     /**//// <summary>
     /// “new”用於隱藏基類成員的繼承成員,是重寫方法的另一種辦法;
     /// 在同一成員上同時使用 new 和 override 是錯誤的;
     /// “override”只是隱藏了虛擬方法。
     /// </summary>
     new public void RealMethod()
     {
       Console.WriteLine(@"The ""RealMethod"" method of ""NewAndOverride"" class!");
     }

    public override void ViutualMethod()
     {
       Console.WriteLine(@"The ""ViutualMethod"" method of ""NewAndOverride""class!");
     }
   }

  class Tester
   {
     /**//// <summary>
     /// 運行結果:
     /// The "RealMethod" method of "BeiseClass" class!
     /// The "RealMethod" method of "NewAndOverride" class!
     /// The "ViutualMethod" method of "BeiseClass"class!
     /// The "ViutualMethod" method of "NewAndOverride"class!
     ///
     /// The "RealMethod" method of "BeiseClass" class!
     /// The "ViutualMethod" method of "NewAndOverride"class!
     /// </summary>
     static void Main()
     {
       BeiseClass beiseClass = new BeiseClass();
       NewAndOverride newAndOverride = new NewAndOverride();

       beiseClass.RealMethod();
       newAndOverride.RealMethod();

beiseClass.ViutualMethod();
       newAndOverride.ViutualMethod();

      Console.WriteLine();

      //
       // 注意:可以看到隱藏方法仍然存在,而被覆蓋的方法已經不存在了;
       //
       beiseClass = newAndOverride;

       beiseClass.RealMethod();
       beiseClass.ViutualMethod();

    }
   }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved