Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menonjolkan Jenis Generik dengan Pembina Berparameter dalam C#?

Bagaimanakah Saya Boleh Menonjolkan Jenis Generik dengan Pembina Berparameter dalam C#?

Susan Sarandon
Susan Sarandonasal
2025-01-09 12:27:49931semak imbas

Jenis generik C# dan instantiasi pembina berparameter

Andaikan anda mempunyai kaedah generik yang menerima jenis generik dan anda ingin membuat contoh jenis itu dengan parameter pembina tertentu. Walau bagaimanapun, pembina jenis memerlukan parameter, dan anda tidak tahu sama ada anda boleh melakukannya.

Coretan kod berikut menunjukkan percubaan untuk mencipta objek buah 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 mungkin gagal kerana BaseFruit tiada pembina tanpa parameter. Ia memerlukan parameter integer untuk menentukan berat buah.

Untuk menyelesaikan masalah ini, C# menyediakan kelas Activator. Anda boleh mencipta contoh jenis menggunakan kaedah Activator.CreateInstance dan lulus tatasusunan objek sebagai hujah pembina:

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

Perhatikan bahawa menggunakan kekangan T pada new() hanya memastikan bahawa pengkompil menyemak pembina tanpa parameter awam pada masa penyusunan. Kod sebenar yang digunakan untuk mencipta jenis dikendalikan oleh kelas Activator.

Walaupun pendekatan ini membolehkan anda membuat instantiate jenis dengan pembina berparameter, anda mesti memastikan bahawa pembina khusus hadir dalam definisi jenis. Bergantung pada pendekatan ini mungkin menunjukkan potensi bau kod dan mencadangkan anda perlu meneroka pilihan reka bentuk lain.

How Can I Instantiate Generic Types with Parameterized Constructors in C#?

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menonjolkan Jenis Generik dengan Pembina Berparameter 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