Rumah >pembangunan bahagian belakang >C++ >Bolehkah Instalasi Jenis Generik Mengendalikan Argumen Pembina dalam C#?

Bolehkah Instalasi Jenis Generik Mengendalikan Argumen Pembina dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-09 12:11:42126semak imbas

Can Generic Type Instantiation Handle Constructor Arguments in C#?

Instasiasi jenis generik C# dan parameter pembina

Apabila membina jenis generik, soalan biasa ialah: Bagaimana untuk membuat instantiate pembina yang memerlukan parameter dalam kaedah generik? Sebagai contoh, kelas BaseFruit mempunyai pembina yang menerima parameter berat jenis integer.

Bagaimana untuk membuat instantiat buah-buahan dengan berat tertentu dalam kaedah generik?

Kod berikut cuba mencipta contoh buah dengan berat tertentu dalam kaedah generik:

<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit
{
    BaseFruit fruit = new T(weight); /*new Apple(150);*/
    fruit.Enlist(fruitManager);
}</code>

Pendekatan ini hanya boleh dilakukan jika BaseFruit mempunyai pembina tanpa parameter yang kemudiannya mengubah suai sifat melalui pembolehubah ahli. Walau bagaimanapun, dalam aplikasi sebenar, ini mungkin tidak praktikal.

Alternatif:

boleh menggunakan kelas Activator:

<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>

Dalam kes ini, kekangan T pada new() memastikan bahawa pembina tanpa parameter awam wujud pada masa penyusunan, dan kelas Activator bertanggungjawab untuk penciptaan jenis sebenar.

Nota:

Walaupun senario ini menyediakan penyelesaian, kewujudan pembina khusus mesti disahkan dalam kod. Selain itu, bergantung pada pendekatan ini mungkin menunjukkan masalah pada tahap kod dan harus dielakkan dalam versi C# semasa.

Atas ialah kandungan terperinci Bolehkah Instalasi Jenis Generik Mengendalikan Argumen Pembina 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