C#之虛方法解讀
方法聲明前帶有virtual關(guān)鍵字,那么這個(gè)方法就是虛方法,虛方法的實(shí)現(xiàn)可以由派生類所取代,這種取代是通過(guò)方法的重寫實(shí)現(xiàn)的特點(diǎn):1.虛方法不允許有static修飾符2.虛方法不允許有abstract修飾符3.虛方法不允許有override修飾符4.虛方法不能是私有的,不能使用PRivate修飾符一般方法在編譯時(shí)就靜態(tài)地編譯到了執(zhí)行文件中,其相對(duì)地址在程序運(yùn)行期間是不發(fā)生變化的而虛方法在編譯期間是不被靜態(tài)編譯的,它的相對(duì)地址是不確定的,它會(huì)根據(jù)運(yùn)行時(shí)期對(duì)象實(shí)例來(lái)動(dòng)態(tài)判斷要調(diào)用的函數(shù)eg:Bird a = new Eagle(); 其中Bird是申明類,Eagle是實(shí)例類。1.當(dāng)a調(diào)用一個(gè)Eagle類的方法時(shí),系統(tǒng)會(huì)直接去檢查Eagle類,看所調(diào)用的方法是否為虛方法;2.如果不是虛方法,那么它就直接執(zhí)行該方法。而如果是一個(gè)虛方法,那么這個(gè)時(shí)候它就不會(huì)立刻執(zhí)行該方法了,而是開(kāi)始檢查Eagle類。3.在這個(gè)Eagle類里,他會(huì)檢查Eagle類的定義中是否有實(shí)現(xiàn)該虛方法或者重新實(shí)現(xiàn)該虛方法(通過(guò)override關(guān)鍵字)的方法,如果有,它就不會(huì)再找了,而是馬上執(zhí)行該Eagle類中實(shí)現(xiàn)虛方法的方法。
4.而如果沒(méi)有的話,系統(tǒng)就會(huì)不停地往上找Eagle類的父類,并對(duì)父類重復(fù)剛才在Eagle類里的檢查,直到找到第一個(gè)重載了該虛方法的父類為止,然后執(zhí)行該父類里重載后的方法。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注