Rumah >pembangunan bahagian belakang >C++ >Mengapa Permulaan Senarai Gagal dengan Jenis Terbuka Generik dalam C#?

Mengapa Permulaan Senarai Gagal dengan Jenis Terbuka Generik dalam C#?

DDD
DDDasal
2025-01-11 06:00:42280semak imbas

Why Does List Initialization Fail with a Generic Open Type in 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:

  1. 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.

  2. 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!

Kenyataan:
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