首頁 > 後端開發 > C++ > 為什麼協方差和違規行為與C#中的價值類型不起作用?

為什麼協方差和違規行為與C#中的價值類型不起作用?

Susan Sarandon
發布: 2025-01-30 21:16:10
原創
160 人瀏覽過

Why Don't Covariance and Contravariance Work with Value Types in C#?

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

>

c#的協方差和違反功能啟用靈活的類型分配。 但是,這些功能在使用價值類型時受到限制。

IEnumerable<T>>表現出協方差,允許分配T參考對象引用。 這不會擴展到值類型,如說明:

<code class="language-csharp">IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;  // Compiles fine

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;  // Compilation error</code>
登入後複製

這種差異源於拳擊。 將值類型分配給參考變量需要拳擊 - 創建新的堆分配的對象。 這增加了開銷並引入了潛在的運行時問題。

>有了協方差,通用語言運行時(CLR)無法保證保留盒裝價值身份。 例如,一種接受

和修改元素的方法不能保證object[]的盒裝值保持不變。 IEnumerable<int>> 因此,為了保持類型安全性並防止與拳擊相關的錯誤,不支持C#中的價值類型的協方差和違反率

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

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