Rumah >pembangunan bahagian belakang >C++ >Kovarians vs Peralihan: Bagaimana konsep -konsep ini berbeza dalam pengaturcaraan?

Kovarians vs Peralihan: Bagaimana konsep -konsep ini berbeza dalam pengaturcaraan?

Barbara Streisand
Barbara Streisandasal
2025-01-25 03:01:09803semak imbas

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

kovarians dan pelanggaran: perbezaan yang jelas dalam pengaturcaraan

kovarians dan pelanggaran adalah konsep asas dalam pengaturcaraan yang menentukan bagaimana hubungan jenis mempengaruhi pemetaan fungsi dan jenis input/output struktur data. Pada dasarnya, kovarians mengekalkan arah penyerahan, sementara pelanggaran membalikkannya.

kovarians: Mengekalkan kebolehterimaan

mari kita ilustrasikan dengan set jenis:

<code>{ Animal, Tiger, Fruit, Banana }
{ IEnumerable<Animal>, IEnumerable<Tiger>, IEnumerable<Fruit>, IEnumerable<Banana> }</code>
pemetaan t → iEnumerable

mengekalkan kebolehgunaan. Jika adalah subtipe Tiger, maka Animal juga subtipe IEnumerable<Tiger>. Ini adalah perkara biasa dalam jenis kontena, di mana subtyping terpakai kepada unsur -unsur yang terkandung. IEnumerable<Animal>

Pelanggaran: Membalikkan kebolehterimaan

Sekarang, pertimbangkan set jenis ini:

<code>{ IComparable<Tiger>, IComparable<Animal>, IComparable<Fruit>, IComparable<Banana> }</code>
pemetaan t → icomparable

membalikkan kebolehterimaan. Jika adalah supertype Animal, maka Tiger adalah subtipe IComparable<Animal>. Ini sering diperhatikan dalam jenis fungsional, di mana jenis pelanggaran menguruskan parameter input jenis spesifik atau berkaitan. IComparable<Tiger>

Perbezaan utama diringkaskan

kovarians menegakkan arahan penyerahan; Nilai subtipe boleh diberikan kepada nilai supertype dalam kedua -dua input dan output fungsi. Sebaliknya, pelanggaran membalikkan kebolehgunaan, membolehkan penugasan nilai supertype kepada nilai subtipe dalam parameter input, tetapi tidak dalam output.

Atas ialah kandungan terperinci Kovarians vs Peralihan: Bagaimana konsep -konsep ini berbeza dalam pengaturcaraan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn