首頁 >後端開發 >C++ >協變與逆變:這些概念在程式設計上有何不同?

協變與逆變:這些概念在程式設計上有何不同?

Barbara Streisand
Barbara Streisand原創
2025-01-25 03:01:09781瀏覽

Covariance vs. Contravariance: How Do These Concepts Differ in Programming?

協方差和違反:編程中的明確區別 >協方差和違反率是編程中的基本概念,它定義了類型關係如何影響功能映射和數據結構輸入/輸出類型。 本質上,協方差保留了可分配性方向,而逆向逆轉。

協方差:維護分配性

讓我們用類型集說明:

映射t→iEnumerable

保持分配性。 如果
<code>{ Animal, Tiger, Fruit, Banana }
{ IEnumerable<Animal>, IEnumerable<Tiger>, IEnumerable<Fruit>, IEnumerable<Banana> }</code>

的子類型,則也是Tiger>的子類型。這在容器類型中很常見,其中亞型適用於包含的元素。 Animal IEnumerable<Tiger>違反:倒置分配性IEnumerable<Animal>

現在,考慮以下類型集:

映射t→iComable

倒置分配性。如果

<code>{ IComparable<Tiger>, IComparable<Animal>, IComparable<Fruit>, IComparable<Banana> }</code>
>的超構型,則

>的子類型。 在功能類型中經常觀察到這一點,其中違反類型管理特定類型或相關類型的輸入參數。 Animal> TigerIComparable<Animal>>鍵差總結IComparable<Tiger>

協方差維護可分配性方向;子類型值可以分配給函數輸入和輸出中的超級型值。 相比之下,違反逆轉性可分配性,將超級型值分配賦予輸入參數中的子類型值,但在輸出參數中不進行。 >

以上是協變與逆變:這些概念在程式設計上有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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