Rumah > pembangunan bahagian belakang > C++ > Bolehkah Pembina Generik C# Menguatkuasakan Jenis Parameter Khusus Melebihi Pembina Tanpa Parameter?

Bolehkah Pembina Generik C# Menguatkuasakan Jenis Parameter Khusus Melebihi Pembina Tanpa Parameter?

Mary-Kate Olsen
Lepaskan: 2025-01-14 15:52:43
asal
618 orang telah melayarinya

Bolehkah pembina generik C# memaksa jenis parameter ditentukan? Melangkaui batasan pembina tanpa parameter

Dalam C#, kekangan boleh diletakkan pada kaedah generik untuk memastikan keperluan khusus dipenuhi. Kekangan biasa adalah untuk menentukan bahawa jenis generik mesti mempunyai pembina tanpa parameter. Walau bagaimanapun, persoalan semula jadi timbul: bolehkah kita mengenakan kekangan yang lebih khusus pada pembina?

Kes: Jenis parameter paksa

Mari kita ambil contoh yang disediakan dalam soalan, di mana kita mahu memaksa pembina yang menerima parameter float[,]. Percubaan awal:

<code class="language-c#">public static T Method<T>(T a) where T : new(float[,] u) {
    //...do something...
    return new T(new float[0, 0]);
}</code>
Salin selepas log masuk

Kompilasi gagal, memaksa kami mencari alternatif.

Penyelesaian: Buat perwakilan tersuai

Untuk memintas pengehadan ini, kami menggunakan penyelesaian dengan memperkenalkan perwakilan yang bertanggungjawab untuk membuat contoh jenis T. Wakil ini mengambil parameter yang diperlukan sebagai parameter dan mengembalikan contoh T.

<code class="language-c#">public static void Method<T>(T a, Func<float[,], T> creator) {
    //...do something...
}</code>
Salin selepas log masuk

Ubah suai kod kami untuk menggunakan perwakilan ini, dengan keputusan berikut:

<code class="language-c#">A.Method(float[,], instanceCreator);
Func<float[,], T> instanceCreator = (float[,] arr) => new T(arr);</code>
Salin selepas log masuk

Penyelesaian ini membolehkan kami mengenakan kekangan yang lebih kompleks pada pembina dengan menghantar perwakilan yang sesuai.

Can C# Generic Constructors Enforce Specific Parameter Types Beyond Parameterless Constructors?

Atas ialah kandungan terperinci Bolehkah Pembina Generik C# Menguatkuasakan Jenis Parameter Khusus Melebihi Pembina Tanpa Parameter?. 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