位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# OOP技術(shù) 多態(tài)性

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-04

    繼承的一個(gè)結(jié)果是派生于基類的類在方法和屬性上有一定的重疊,因此,可以使用相同的語(yǔ)法處理從同一個(gè)基類實(shí)例化的對(duì)象。例如,如果基類Animal有一個(gè)EatFoodO方法,則在其派生類Cow和Chicken中調(diào)用這個(gè)方法的語(yǔ)法是類似的:

    Cow myCow = new Cow();

    Chicken myChicken = new Chicken();

    myCow.EatFood() ;

    myChicken.EatFood() ;

多態(tài)性則推進(jìn)了一步??梢园涯硞€(gè)派生類型的變量賦給基本類型的變量,例如:

    Animal myAnimal = myCow;

不需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,就可以通過(guò)這個(gè)變量調(diào)用基類的方法:

    myAnimal.EatFood();

結(jié)果是調(diào)用派生類中的EatFoodO的實(shí)現(xiàn)代碼。注意,不能以相同的方式調(diào)用派生類上定義的方法。下面的代碼無(wú)法運(yùn)行:

    myAnimal .Moo();

但可以把基本類型的變量轉(zhuǎn)換為派生類變量,調(diào)用派生類的方法,如下所示:

    Cow myNewCow = (Cow)myAnimal;

    myNewCow.Moo();

如果原始變量的類型不是Cbw或派生于Cbw的類型,這種強(qiáng)制類型轉(zhuǎn)換就會(huì)引發(fā)一個(gè)異常。


    在派生于同一個(gè)類的不同對(duì)象上執(zhí)行任務(wù)時(shí),多態(tài)性是一種極有效的技巧,其使用的代碼最少。注意并不是只有共享同一個(gè)父類的類才能利用多態(tài)性。只要子類和孫子類在繼承層次結(jié)構(gòu)中有一個(gè)相同的類,它們就可以用同樣的方式利用多態(tài)性。

    還要注意,在C#中,所有類都派生于同一個(gè)類object, object是繼承層次結(jié)構(gòu)中的根。所以可以把所有對(duì)象看成object類的實(shí)例。這就是在建立字符串時(shí),WriteLineO可以處理無(wú)數(shù)多種參數(shù)組合的原因。第一個(gè)參數(shù)后面的每個(gè)參數(shù)都可以看成一個(gè)object實(shí)例,所以可以把任何對(duì)象的輸出結(jié)果寫到屏幕上。為此,需要調(diào)用方法ToStringCXobject的一個(gè)成員)。我們可以重寫這個(gè)方法,為自己的類提供合適的實(shí)現(xiàn)代碼,或者使用默認(rèn)實(shí)現(xiàn)代碼,返回類名(根據(jù)它所在的名稱空間,返回類的限定名稱)。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部