Rumah > pembangunan bahagian belakang > C++ > Mengapa C# 4.0 Tidak Menyokong Varians Generik untuk Kelas?

Mengapa C# 4.0 Tidak Menyokong Varians Generik untuk Kelas?

Barbara Streisand
Lepaskan: 2025-01-12 21:31:45
asal
606 orang telah melayarinya

Why Doesn't C# 4.0 Support Generic Variance for Classes?

Sekatan C# 4.0 pada Varians Generik dalam Kelas

Tidak seperti antara muka, C# 4.0 tidak membenarkan varians generik untuk kelas. Had ini menimbulkan persoalan: mengapa sekatan? Apakah potensi kelemahan untuk mendayakan varians generik untuk kelas?

Cabaran dengan Kelas Kovarian

Bayangkan kelas kovarian, C<T>. Untuk melaksanakan kovarians, T perlu betul-betul jenis output. Ini bermakna kelas tidak boleh mempunyai kaedah atau sifat yang mengambil T sebagai input. Begitu juga, medan jenis T akan tidak dibenarkan, kerana ia pada asasnya berfungsi seperti penetap harta.

Kebolehgunaan Terhad: Struktur Tidak Berubah

Satu-satunya aplikasi realistik kelas kovarian ialah struktur tidak berubah seperti senarai atau tindanan. Walaupun kelas tidak berubah menawarkan kelebihan, kes penggunaan terhad ini tidak membenarkan overhed yang besar bagi kovarians sokongan asli untuk jenis kelas tidak berubah.

Contoh Ilustrasi: Potensi Kelebihan

Kovarian Stack<T> boleh, secara teorinya, membenarkan kod seperti ini:

<code class="language-csharp">Stack<string> strings = null;
strings = strings.Push("hello");
strings = strings.Push("goodbye");
Stack<object> objects = strings;
objects = objects.Push(123);</code>
Salin selepas log masuk

Di sini, menambah integer pada tindanan rentetan adalah selamat jenis kerana struktur tidak berubah menghalang operasi yang menjejaskan keselamatan jenis.

Ringkasan

Walaupun varians generik untuk kelas mungkin menawarkan beberapa faedah, kekangan—ketidakupayaan untuk menggunakan parameter jenis kelas sebagai kaedah atau input sifat—melebihi kelebihannya. Ini menerangkan ketiadaannya dalam C# 4.0 dan versi yang lebih baru.

Atas ialah kandungan terperinci Mengapa C# 4.0 Tidak Menyokong Varians Generik untuk Kelas?. 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