C#中Virtual與override分別有什麼用途

來源:互聯網
上載者:User

using   System;
class   A
{
    public   A()
    {
        PrintFields();
    }

    public   virtual   void   PrintFields()
    {}
}

class   B:A
{
    int   x=1;
    int   y;
    public   B()
    {
        y=-1;
    }

    public   override   void   PrintFields()  
    {
        Console.WriteLine( "x={0},y={1} ",x,y);
    }
}

當使用new   B()建立B的執行個體時,產生什麼輸出?

--------------------------------------------
=========================================
x   =1   y   =0

new   B()後首先執行
int   x=1;
int   y;
再執行B的建構函式時會調用基類建構函式先   於是執行
public   A()
    {
        PrintFields();
    }

而A中的PrintFields方法是virtual方法且B中已經用override關鍵字實現了該方法  
於是會執行子類B中的PrintFields方法   Console.WriteLine( "x={0},y={1} ",x,y);  
//注意此時還沒有執行到B的建構函式   所以   y值為0

而後才執行到B的建構函式//此時   x=1   y   =-1;

virtual修飾的方法為虛方法,暗示其子類最好有自己的實現

override修飾的方法為重寫方法,表示覆蓋了基類原有方法的實現
virtual修飾的方法

其子類除了override   還可用new來修飾

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.