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>
mengekalkan kebolehgunaan. Jika 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>
membalikkan kebolehterimaan. Jika 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!