新聞中心
當(dāng)類中的方法聲明前加上了virtual修飾符,我們稱之為C#虛擬方法 ,反之為非虛。使用了virtual修飾符后,不允許再有static、abstract或override修飾符。對(duì)于非虛的方法,無論被其所在類的實(shí)例調(diào)用,還是被這個(gè)類的派生類的實(shí)例調(diào)用,方法的執(zhí)行方式不變。而對(duì)于虛方法,它的執(zhí)行方式可以被派生類改變,這種改變是通過方法的重載來實(shí)現(xiàn)的。

十多年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站設(shè)計(jì),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站設(shè)計(jì),高端網(wǎng)頁制作,對(duì)成都雨棚定制等多個(gè)領(lǐng)域,擁有多年的網(wǎng)站制作經(jīng)驗(yàn)。
下面的例子說明了C#虛擬方法與非虛方法的區(qū)別。
例子:
- 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();
- b.F();
- a.G();
- b.G();
- }
- }
例子中,A類提供了兩個(gè)方法:非虛的F和C#虛擬方法 G.類B則提供了一個(gè)新的非虛的方法F,從而覆蓋了繼承的F;類B同時(shí)還重載了繼承的方法G.那么輸出應(yīng)該是:
A.F
B.F
B.G
B.G
注意到本例中,方法a.G()實(shí)際調(diào)用了B.G,而不是A.G.這是因?yàn)榫幾g時(shí)值為A,但運(yùn)行時(shí)值為B,所以B完成了對(duì)方法的實(shí)際調(diào)用。
當(dāng)前文章:簡介C#虛擬方法
網(wǎng)站地址:http://fisionsoft.com.cn/article/dhijsod.html


咨詢
建站咨詢
