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
Lepaskan: 2025-01-09 12:11:42
asal
123 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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