C#的虛擬方法

來源:互聯網
上載者:User
當類中的方法聲明前加上了virtual修飾符,我們稱之為虛方法,反之為非虛。使用了virtual修飾符後,不允許再有static、abstract或override修飾符。對於非虛的方法,無論被其所在類的執行個體調用,還是被這個類的衍生類別的執行個體調用,方法的執行方式不變。而對於虛方法,它的執行方式可以被衍生類別改變,這種改變是通過方法的重載來實現的。
下面的例子說明了虛方法與非虛方法的區別。
例子:Code
using System;
class A
{
   public void F(){Console.WriteLine("A.F");}
   public virtual void G(){Console.WriteLine("A.G");}
}
class B:A
{
   new public void F(){Console.WriteLine("B.F");}
   public override void G(){Console.WriteLine("B.G");}
}
class Test
{
   static void Main()
   {
      B b=new B();
      A a=b; //這裡是類型轉換
      a.F();  //輸出A.F
      b.F();  //輸出B.F
      a.G();  //輸出B.G
      b.G();  //輸出B.G
   }
}

例子中,A類提供了兩個方法:非虛的F和虛方法G.類B則提供了一個新的非虛的方法F,從而覆蓋了繼承的F;類B同時還重載了繼承的方法G.那麼輸出應該是:
A.F
B.F
B.G
B.G
注意到本例中,方法a.G()實際調用了B.G,而不是A.G.這是因為編譯時間值為A,但運行時值為B,所以B完成了對方法的實際調用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.