基础才是重中之重~方法override详解
回到 目錄
之所以寫(xiě)這篇文章,完全是因?yàn)檫@次代碼審核,這次代碼審核過(guò)程當(dāng)中,出現(xiàn)了很多我認(rèn)為基礎(chǔ)知識(shí)不夠扎實(shí)的問(wèn)題,所以,打算把它們記錄下來(lái),共大家分享。
方法的override,即方法的覆寫(xiě)或者重寫(xiě),有時(shí)還是習(xí)慣叫它英文override,它是指將父類(lèi)的abstract或者virtual方法進(jìn)行重新設(shè)計(jì),可以將新的功能加入其中,看起來(lái)很不錯(cuò),但在使用過(guò)程中,有時(shí)我們可能拿不準(zhǔn)它,下面我說(shuō)幾點(diǎn):
一 父類(lèi)是抽象類(lèi),這時(shí),它的實(shí)例化需要通過(guò)子類(lèi)來(lái)完成,這時(shí)的override是子類(lèi)最后重寫(xiě)的
二 父類(lèi)是普通類(lèi),這時(shí),它的實(shí)例化工作如果由自己完成,結(jié)果就是父類(lèi)virtual的結(jié)果,與它的子類(lèi)無(wú)關(guān)。
三 父類(lèi)是普通類(lèi),它的實(shí)例化工作如果由子類(lèi)完成,那么,它的結(jié)果就是子類(lèi)方法override的結(jié)果
OK,下面我們來(lái)說(shuō)一下例子,它由father類(lèi)和sons類(lèi)組成,father類(lèi)是一個(gè)普通類(lèi),在這實(shí)現(xiàn)當(dāng)中,它很可能是個(gè)泛型類(lèi),如倉(cāng)儲(chǔ)模式的實(shí)現(xiàn)
/// <summary>/// 一個(gè)爸爸/// </summary>class Father{public virtual void print(){Console.WriteLine("我是爸爸");}}下面是兒子A對(duì)爸爸的print方法的重寫(xiě)工作
/// <summary>/// 一個(gè)兒子A/// </summary>class SonA : Father{public override void print(){Console.WriteLine("我是兒子");//override father class print method. }public void sonPrint(){base.print(); //我是爸爸print();//我是兒子 }}而下面是對(duì)print方法的各種調(diào)用工作,包括了實(shí)現(xiàn)化的方式
static void Main(string[] args){SonA son = new SonA();son.sonPrint(); //我是爸爸,我是兒子Father father = new Father();father.print();//我是爸爸Father son2 = new SonA();son2.print();//兒是兒子}OK,通過(guò)結(jié)果我們可以看出:
在兒子類(lèi)里,base.print()方法走的是爸爸的print;print走的是兒子
在兒子類(lèi)以外,使用爸爸自己去實(shí)例化后,print走的是爸爸的;使用兒子進(jìn)行實(shí)例化后,print方法走的是兒子重寫(xiě)后的;
回到 目錄
總結(jié)
以上是生活随笔為你收集整理的基础才是重中之重~方法override详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Bootstrap3.0学习第十轮(下拉
- 下一篇: “码农”的逆袭