顯式參考轉換 發生在參考型別之間,且編譯器無法靜態保證安全的情況。必須在執行期檢查實際物件型別,失敗拋 InvalidCastException。
object → 任意參考型別:拆箱、介面解包。Derived d = (Derived)baseRef;(向下轉型)IFoo f = (IFoo)obj;(obj 非 sealed 且未實作 IFoo)MyClass c = (MyClass)iface;IChild c = (IChild)iparent;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) { }
無論隱含或顯式參考轉換,只改變參考的靜態型別,不改變物件本身(記憶體位址、內容、同一性皆不變)。