Rumah > pembangunan bahagian belakang > C++ > Bolehkah Jenis Generik dengan Pembina Berparameter Dimulakan dalam C#?

Bolehkah Jenis Generik dengan Pembina Berparameter Dimulakan dalam C#?

Barbara Streisand
Lepaskan: 2025-01-09 12:17:41
asal
721 orang telah melayarinya

Jenis generik C# dan instantiasi pembina berparameter

Artikel ini meneroka cara membuat instantiate jenis generik dengan pembina berparameter dalam C#.

Andaikan terdapat kaedah generik untuk menambah buah-buahan pada pengurus buah:

<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

di mana kelas BaseFruit mempunyai pembina yang mengambil integer weight sebagai parameter.

Soalan: Bolehkah kita membuat instantiat objek buah dengan berat tertentu dalam kaedah generik ini?

Jawapan: Ya, tetapi tidak secara langsung seperti dalam contoh. Terdapat dua kaedah:

1. Gunakan kelas Activator:

Menggunakan kelas Activator, kita boleh membuat instantiat objek jenis T secara dinamik dan lulus parameter yang diperlukan sebagai tatasusunan objek:

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

Perhatikan bahawa ini memerlukan kelas BaseFruit mempunyai pembina tanpa parameter awam untuk diperiksa oleh pengkompil, tetapi sebenarnya ia menggunakan kelas Activator untuk mencipta contoh.

2. Gunakan parameter generik dengan pembina:

C# mengehadkan penggunaan pembina yang memerlukan parameter untuk membuat contoh jenis generik. Sebagai penyelesaian, anda boleh mencipta parameter generik dengan nama yang sama dengan jenis dan menentukan parameter pembina dalam definisinya:

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

// 使用示例:
AddFruit(new Apple(150));</code>
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini secara amnya tidak disyorkan kerana ia boleh membawa kepada bau kod yang berkaitan dengan keperluan pembina dalam jenis generik.

Can Generic Types with Parameterized Constructors Be Instantiated in C#?

Atas ialah kandungan terperinci Bolehkah Jenis Generik dengan Pembina Berparameter Dimulakan 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