C# 轉(zhuǎn)換

2018-01-16 03:40 更新

C# 轉(zhuǎn)換

轉(zhuǎn)換和引用

對象引用可以是:

  • 隱式向上轉(zhuǎn)換為基類引用
  • 顯式地向下轉(zhuǎn)換為子類引用

上傳總是成功的;只有在對象正確鍵入時,向下轉(zhuǎn)換才會成功。

向上轉(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)換

向下轉(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運算符

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); 
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號