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!