W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
對(duì)象引用可以是:
上傳總是成功的;只有在對(duì)象正確鍵入時(shí),向下轉(zhuǎn)換才會(huì)成功。
向上轉(zhuǎn)換操作從子類引用創(chuàng)建基類引用。
例如:
Product myProduct = new Product();
Item a = myProduct; // Upcast
Product
, DiscountProduct
, Item
都在上一節(jié)中定義。
在upcast之后,變量a仍然引用與變量myProduct相同的Product對(duì)象。
被引用的對(duì)象本身不被改變或轉(zhuǎn)換:
Console.WriteLine (a == myProduct); // True
雖然a和myProduct引用相同的對(duì)象,但是對(duì)該對(duì)象有更嚴(yán)格的視圖:
Console.WriteLine (a.Name); // OK
Console.WriteLine (a.InStoreCount); // Error: InStoreCount undefined
最后一行生成編譯時(shí)錯(cuò)誤,因?yàn)樽兞縜的類型為Item,即使它引用了Product類型的對(duì)象。
要到達(dá)其InStoreCount字段,我們必須將該項(xiàng)目下轉(zhuǎn)到產(chǎn)品。
向下轉(zhuǎn)換操作從基類引用創(chuàng)建子類引用。
例如:
Product myProduct = new Product();
Item a = myProduct; // Upcast
Product s = (Product)a; // Downcast
Console.WriteLine (s.InStoreCount);
Console.WriteLine (s == a); // True
Console.WriteLine (s == myProduct); // True
與upcast一樣,只有引用受影響,而不是底層對(duì)象。
向下轉(zhuǎn)換需要顯式轉(zhuǎn)換,因?yàn)樗赡茉谶\(yùn)行時(shí)失?。?br />
DiscountProduct h = new DiscountProduct();
Item a = h; // Upcast always succeeds
Product s = (Product)a; // Downcast fails: a is not a Product
如果向下轉(zhuǎn)換失敗,則拋出 InvalidCastException
。
as
運(yùn)算符執(zhí)行一個(gè)求值為null的向下轉(zhuǎn)換,而不是在向下轉(zhuǎn)換失敗時(shí)拋出異常:
Item a = new Item();
Product s = a as Product; // s is null; no exception thrown
當(dāng)您要隨后測試結(jié)果是否為null時(shí),這很有用:
if (s != null) {
Console.WriteLine (s.InStoreCount);
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: