首頁 > 後端開發 > C++ > 為什麼協方差不使用C#中的價值類型?

為什麼協方差不使用C#中的價值類型?

Linda Hamilton
發布: 2025-01-30 21:11:10
原創
830 人瀏覽過

Why Doesn't Covariance Work with Value Types in C#?

c#協方差和違反:值類型限制

>

> C#中的接口展示協方差,允許將派生類型引用分配給基本類型引用。 但是,這不適用於價值類型。 將IEnumerable<T>分配給IEnumerable<int>>導致彙編錯誤。 IEnumerable<object>>

這個限制源於拳擊和拆箱。拳擊將值類型轉換為參考類型(

),而拆箱會反轉。 object>的類型參數IEnumerable<T>僅與參考類型一起使用。 將值類型分配給需要拳擊,這對價值類型不隱含地支持。 > T>協方差和違反依賴於轉換之間的一致價值表示。但是,價值類型不能保持這種一致性。 拳擊改變了他們的代表性,可能導致身份喪失和不穩定,違反了協變和違反任務的原則。 IEnumerable IEnumerable<object>埃里克·利珀特(Eric Lippert)關於代表和身份的著作強調了這些轉換需要保存。 由於價值類型的拳擊過程打破了此保存,因此它們與協方差和違反。

>

以上是為什麼協方差不使用C#中的價值類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板