首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 顯式參考轉換:執行期型別檢查、InvalidCastException 與安全轉換模式

     編輯:關於C語言

顯式參考轉換 發生在參考型別之間,且編譯器無法靜態保證安全的情況。必須在執行期檢查實際物件型別,失敗拋 InvalidCastException。

六大顯式參考轉換類別

  1. object → 任意參考型別:拆箱、介面解包。
  2. 基底類別 → 衍生類別:Derived d = (Derived)baseRef;(向下轉型)
  3. 未實作介面的類別 → 介面:IFoo f = (IFoo)obj;(obj 非 sealed 且未實作 IFoo)
  4. 介面 → 非 sealed 類別:MyClass c = (MyClass)iface;
  5. 介面 → 非子介面:IChild c = (IChild)iparent;
  6. 陣列顯式協變:元素型別間存在顯式參考轉換、維度相同、皆為參考型別。

統一轉換(反向)

  • System.Array → 具體陣列型別
  • System.Delegate → 具體委派型別
  • System.ICloneable → 陣列/委派型別

執行期檢查規則

來源值必須為 null,或 其引用的物件型別能隱含參考轉換為目標型別。否則拋 InvalidCastException。

安全轉換模式


// 模式 1:is 型別模式 (C# 7+)
if (obj is Derived d) { d.Method(); }

// 模式 2:as + null 檢查
var d = obj as Derived;
if (d != null) { d.Method(); }

// 模式 3:try-catch(罕見,效能差)
try { var d = (Derived)obj; } catch (InvalidCastException) { }

關鍵不變量

無論隱含或顯式參考轉換,只改變參考的靜態型別,不改變物件本身(記憶體位址、內容、同一性皆不變)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved