Rumah >pembangunan bahagian belakang >C++ >Mengapa Permulaan Senarai Gagal dengan Jenis Terbuka Generik dalam C#?
Kegagalan Permulaan Senarai Jenis Terbuka Generik C#: Penyelesaian
Apabila bekerja dengan jenis terbuka generik seperti Data<T>
dan jenis binaan tertutupnya (mis., StringData
, DecimalData
), cubaan mencipta senarai menggunakan List<Data>
mengakibatkan ralat pengkompil: "Menggunakan jenis generik 'Data' memerlukan 1 jenis argumen." Ini kerana C# tidak menyokong pengendali berlian untuk jenis generik terbuka; hujah jenis konkrit sentiasa diperlukan.
Masalahnya Diterangkan
Pengkompil perlu mengetahui jenis khusus dalam kelas Data<T>
untuk membuat senarai. List<Data>
adalah samar-samar; ia tidak menyatakan jenis yang diwakili T
.
Penyelesaian Berkesan
Berikut ialah dua pendekatan praktikal untuk menyelesaikan masalah ini:
Pelaksanaan Antara Muka: Cipta antara muka (cth., IData
) yang Data<T>
dan jenis terbitannya dilaksanakan. Kemudian, isytiharkan senarai anda sebagai List<IData>
. Ini memanfaatkan polimorfisme, membolehkan anda menyimpan tika pelbagai Data<T>
jenis dalam senarai yang sama.
Kelas Asas Abstrak: Takrifkan kelas asas abstrak (cth., DataBase
) untuk Data<T>
. Dapatkan jenis konkrit anda daripada kelas asas ini. Anda kemudian boleh membuat senarai List<DataBase>
. Ini memberikan penaipan yang kuat tetapi dengan kurang generik berbanding pendekatan antara muka.
Pertimbangan
Kedua-dua kaedah memperkenalkan tahap kerumitan reka bentuk. Pilihan bergantung pada keperluan khusus permohonan anda. Antara muka menawarkan fleksibiliti yang lebih besar, manakala kelas asas abstrak menyediakan pendekatan yang lebih berstruktur.
Bacaan Lanjut
Untuk pemahaman yang lebih mendalam tentang generik, varians dan polimorfisme dalam C#, rujuk sumber ini:
Atas ialah kandungan terperinci Mengapa Permulaan Senarai Gagal dengan Jenis Terbuka Generik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!