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