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
Barbara Streisandasal
2025-01-09 12:17:41800semak imbas

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>

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>

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>

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!

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