首頁 >後端開發 >C++ >C# 中的基底類別物件可以明確轉換為衍生類別參考嗎?

C# 中的基底類別物件可以明確轉換為衍生類別參考嗎?

Linda Hamilton
Linda Hamilton原創
2025-01-18 12:13:14474瀏覽

Can a Base Class Object Be Explicitly Cast to a Derived Class Reference in C#?

C# 中從基底類別到衍生類別的明確轉換:運行時風險

在 C# 中使用明確強制轉換直接將基類物件指派給衍生類別參考是有問題的,通常會導致執行時期異常。

此限制源自於衍生類別參考的基本性質。 這樣的參考本質上需要派生類別類型的物件(或 null)。 分配基類物件違反了這項期望,導致不可預測的行為。

考慮這個例子:

<code class="language-csharp">object o = new object();
string s = (string)o; // This will throw an InvalidCastException
int i = s.Length;     // Unreachable code</code>

在無效轉換後嘗試存取特定於衍生類別的成員(在本例中為s.Length)是不可能的。轉換失敗,因為 o 不包含 string 實例。

推薦替代方案

如果需要在基底型別和衍生型別之間轉換,請避免明確轉換。相反,採用更安全的方法:

  • 建立衍生型別實例:寫一個實例化衍生類別物件的方法,並根據基底類別物件的資料填入其屬性。 這種方法確保類型安全和可預測的行為。

  • 重構繼承:重新評估您的繼承層次結構。 如果頻繁需要轉換,繼承關係可能設計不合理。 考慮替代設計模式或重組您的類別。

透過避免直接轉換並採用這些替代方案,您將提高程式碼的穩健性並防止執行時間錯誤。

以上是C# 中的基底類別物件可以明確轉換為衍生類別參考嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn