Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kovarian dan Kontravarian Meningkatkan Penggunaan Antara Muka dalam C#?

Bagaimanakah Kovarian dan Kontravarian Meningkatkan Penggunaan Antara Muka dalam C#?

Mary-Kate Olsen
Lepaskan: 2025-01-21 15:21:10
asal
205 orang telah melayarinya

How Do Covariance and Contravariance Enhance Interface Usage in C#?

Pemahaman mendalam tentang antara muka kovarian dan kontravarian dalam C#

Kovarian dan kontravarian ialah konsep dalam pengaturcaraan berorientasikan objek yang mentakrifkan cara rujukan digunakan dengan jenis yang berbeza. Dalam C#, anda boleh menggunakan sintaks <out T> dan <in T> untuk menandakan antara muka sebagai kovarian atau kontravarian masing-masing.

Kovarian

Dalam C#, kovarians membenarkan rujukan antara muka dianggap sebagai rujukan kepada jenis yang lebih tinggi dalam hierarki. Contohnya, antara muka IBibble<out T> boleh diberikan rujukan contoh IBibble<Descendant>, selagi kelas Descendant mewarisi daripada jenis T. Ini bermakna apa sahaja yang boleh dilakukan pada IBibble<T> juga boleh dilakukan pada IBibble<Descendant>.

Penyongsang

Dalam C#, kontravarian membenarkan rujukan antara muka dianggap sebagai rujukan kepada jenis yang lebih rendah dalam hierarki. Contohnya, antara muka IBibble<in T> boleh diberikan rujukan contoh IBibble<Base>, selagi jenis Base mewarisi daripada jenis T. Ini bermakna mana-mana objek yang boleh ditetapkan kepada IBibble<Base> juga boleh ditetapkan kepada IBibble<Descendant>.

Kegunaan dan Aplikasi

Kovarian berguna apabila bekerja dengan koleksi objek yang berkongsi jenis asas yang sama. Dengan menggunakan antara muka kovarian, kami memastikan bahawa operasi yang dilakukan pada jenis asas juga digunakan untuk semua jenis terbitan.

Kontravarian berguna apabila berurusan dengan kilang atau perwakilan yang menerima parameter pelbagai jenis. Dengan menggunakan antara muka kontravarian, kami memastikan bahawa sebarang objek yang boleh ditetapkan kepada jenis asas juga boleh digunakan sebagai parameter kilang atau perwakilan.

Contoh

Pertimbangkan coretan kod berikut:

<code class="language-csharp">namespace SO2719954
{
    class Base { }
    class Descendant : Base { }

    interface IBibbleOut<out T> { }
    interface IBibbleIn<in T> { }

    class Program
    {
        static void Main(string[] args)
        {
            // 协变示例
            IBibbleOut<Base> b = GetOutDescendant(); // IBibbleOut<Descendant> 赋值

            // 逆变示例
            IBibbleIn<Descendant> d = GetInBase(); // IBibbleIn<Base> 赋值
        }

        static IBibbleOut<Descendant> GetOutDescendant() { return null; }
        static IBibbleIn<Base> GetInBase() { return null; }
    }
}</code>
Salin selepas log masuk

Dalam contoh ini, antara muka IBibbleOut<out T> ialah kovarian, membenarkan b merujuk Descendant objek; antara muka IBibbleIn<in T> adalah bertentangan, membenarkan d merujuk Base objek.

Atas ialah kandungan terperinci Bagaimanakah Kovarian dan Kontravarian Meningkatkan Penggunaan Antara Muka dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan