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中文網其他相關文章!