C#之虛方法和重寫方法

時間:2020-06-18 作者:管理員(yuán) 點擊:691

    //基類中(zhōng)的虛方法到底有什麽作用?
    //C#中(zhōng)指出:普通的方法重載:指的是類中(zhōng)兩個以上的方法(包括隐藏的,繼承而來的方法)取的名字相同,隻要使用的參數類型或者參數個數不同,編譯器便
    //知(zhī)道在何種情況下(xià)應該調用哪個方法。   
    //而在派生(shēng)類中(zhōng)重新定義此虛方法時要求的是:方法名稱、返回值類型、參數表中(zhōng)的參數個數、類型、順序都必須與基類中(zhōng)的虛方法完全一(yī)緻。
    //簡單一(yī)點說就是子類中(zhōng)override的方法能夠覆蓋基類中(zhōng)的virtual方法,當你把一(yī)個子類的實例轉換爲基類時,調用該方法時還是調用的子類的override的方
    //法。
    //一(yī)個類裏面兩個名字一(yī)樣的方法叫“重載”,基類和繼承類裏面名字一(yī)樣的方法叫“重寫”,重寫就必須使用虛方法。
    //隻有基類的方法加上關鍵字virtual後才可以被派生(shēng)類override,從而實現面向對象最重要的特征--多态性,即基類可以使用派生(shēng)類的方法

    //父類中(zhōng)的方法重載,提供了某行爲的不同實現方法(傳入不同的參數);
    //在子類中(zhōng)對父類相應方法的重載,可以這樣理解(實際編譯過程不是這樣),子類完全copy父類代碼後,把重載(override)的那部分(fēn)代碼挖去(qù)并用子類新的
    //代碼填上。
    //如果子類沒有重載(沒有使用voerride關鍵字)而有和父類完全一(yī)樣的方法,可以這樣理解,子類沒有挖去(qù)代碼,隻是簡單覆蓋,當要使用集成
    //來的代碼時,隻需要類型轉換就可以把覆蓋代碼浮現出來。

    //如果不想讓虛方法進行重寫,可以用關鍵字(sealed)進行保護
    //示例:public override sealed void Write();//sealed隻能用在重寫方法上
    
    //下(xià)面的代碼舉例說明
    class a
    {
        public virtual void VirtualMothed()
        {
            Console.WriteLine("這是a類中(zhōng)的一(yī)個虛方法");
        }
        public void NoVirtualMothed()
        {
            Console.WriteLine("這是a類中(zhōng)的一(yī)個非虛方法");
        }
    }
    class b:a
    {
        public override void VirtualMothed()
        {
            Console.WriteLine("這是b類中(zhōng)重寫的一(yī)個虛方法");
        }
        public new void NoVirtualMothed()//非虛方法就不是重寫了,需要定義一(yī)個new來告訴編譯器我(wǒ)(wǒ)新定義了一(yī)個方法。
        {
            Console.WriteLine("這是b類中(zhōng)的一(yī)個非虛方法");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //虛方法:若一(yī)個實例方法聲明中(zhōng)含有virtual這個修飾符,則稱該方法爲虛方法,否則就是非虛方法。
            a a = new a();//實例化類a
            a.VirtualMothed();//輸出結果:這是a類中(zhōng)的一(yī)個虛方法
            a.NoVirtualMothed();//輸出結果:這是a類中(zhōng)的一(yī)個非虛方法

            b b = new b();
            b.VirtualMothed();//輸出結果:這是b類中(zhōng)重寫的一(yī)個虛方法
            b.NoVirtualMothed();//輸出結果:這是b類中(zhōng)的一(yī)個非虛方法

            a = b;//将b賦值給a

            a.VirtualMothed();//輸出結果:這是b類中(zhōng)重寫的一(yī)個虛方法
            a.NoVirtualMothed();//輸出結果:這是a類中(zhōng)的一(yī)個非虛方法

            Console.ReadKey();
        }
    }
返回列表
在線溝通

Are you interested in ?

感興趣嗎(ma)?

有關我(wǒ)(wǒ)們服務的更多信息,請聯系

136 7365 2363(同微信) 13140187702

鄭州網站建設鄭州網站設計鄭州網站制作鄭州建站公司鄭州網站優化--聯系索騰

與我(wǒ)(wǒ)們合作

鄭州網站建設鄭州網站設計鄭州網站制作鄭州建站公司鄭州網站優化--與索騰合作,您将會得到更成熟、專業的網絡建設服務。我(wǒ)(wǒ)們以客戶至上,同時也相互挑戰,力求呈現最好的品牌建設成果。

業務咨詢熱線:

136 7365 2363

TOP

QQ客服

在線留言