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
Mary-Kate Olsenasal
2025-01-14 15:52:43722semak imbas

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>

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>

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>

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!

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