Rumah >pembangunan bahagian belakang >C++ >Mengapa C# 4.0 Tidak Menyokong Varians Generik untuk Kelas?
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>
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!