Rumah > pembangunan bahagian belakang > C++ > Mengapa Kelas Kovarian Tidak Disokong dalam C# 4.0?

Mengapa Kelas Kovarian Tidak Disokong dalam C# 4.0?

Linda Hamilton
Lepaskan: 2025-01-12 21:52:43
asal
893 orang telah melayarinya

Why Aren't Covariant Classes Supported in C# 4.0?

Pengguguran Kelas Kovarian C# 4.0: Pandangan Lebih Dalam

C# 4.0 memperkenalkan varians generik untuk antara muka, membolehkan penggunaan parameter jenis fleksibel. Walau bagaimanapun, fungsi ini tidak diperluaskan kepada kelas. Artikel ini menyelidiki rasional di sebalik pilihan reka bentuk ini.

Halangan Pelaksanaan

Memperkenalkan varians kovarian kepada kelas (cth., kelas C<T> hipotesis) membentangkan cabaran pelaksanaan yang ketara. Had utama timbul daripada fakta bahawa T hanya boleh digunakan sebagai parameter output, dalam penetap atau sebagai medan.

Kekangan ini adalah akibat langsung daripada medan kekurangan getter. Tidak seperti sifat, medan tidak menyediakan akses baca sahaja. Oleh itu, kelas kovarian tidak boleh mempunyai keadaan boleh ubah, mengehadkan penggunaan praktikalnya dengan teruk.

Menimbang Kos dan Faedah

Walaupun kelas tidak berubah kovarian (seperti senarai dan tindanan) tidak dapat dinafikan berfaedah, pengubahsuaian meluas pada sistem jenis C# yang diperlukan untuk menyokongnya tidak dianggap wajar pada masa keluaran C# 4.0.

Menggambarkan Kovarians dalam Struktur Tidak Boleh Berubah

Contoh berikut menunjukkan kovarians dalam timbunan tidak berubah:

<code class="language-csharp">sealed class Stack<out T>
{
    private readonly T head;
    private readonly Stack<T> tail;
}</code>
Salin selepas log masuk

Ini membolehkan tugasan kovarian:

<code class="language-csharp">Stack<string> strings = null;
strings = strings.Push("hello");
strings = strings.Push("goodbye");
Stack<object> objects = strings; // Covariant assignment
objects = objects.Push(123); //This would be an error if Stack<T> was mutable</code>
Salin selepas log masuk

Menambah integer pada tindanan kekal selamat jenis kerana ketakbolehubah tindanan. Operasi tidak melanggar keselamatan jenis.

Atas ialah kandungan terperinci Mengapa Kelas Kovarian Tidak Disokong dalam C# 4.0?. 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