Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kaedah Generik C# Mengekang Parameter Jenis kepada Pembina Tertentu?

Bolehkah Kaedah Generik C# Mengekang Parameter Jenis kepada Pembina Tertentu?

Patricia Arquette
Patricia Arquetteasal
2025-01-14 16:01:44844semak imbas

Can C# Generic Methods Constrain Type Parameters to Specific Constructors?

Kekangan pembina dengan spesifikasi parameter dalam C#

Dalam C#, kaedah generik membenarkan kekangan dikenakan pada parameter jenis. Sebagai contoh, kod berikut menunjukkan kekangan yang memerlukan jenis parameter T untuk mempunyai pembina tanpa parameter:

<code class="language-csharp">public class A {

    public static T Method<T>(T a) where T : new() {
        //...do something...
        return new T();
    }

}</code>

Ini menimbulkan persoalan: bolehkah kita memperhalusi kekangan dan menentukan bahawa T harus mempunyai pembina yang menerima argumen apungan[,]? Malangnya, percubaan berikut gagal untuk disusun:

<code class="language-csharp">public class A {

    public static T Method<T>(T a) where T : new(float[,] u) {
        //...do something...
        return new T(new float[0,0]);
    }

}</code>

Penyelesaian

Memandangkan kekangan ini tidak boleh digunakan, kami boleh menggunakan penyelesaian dan menggunakan perwakilan untuk memulakan objek jenis T:

<code class="language-csharp">public class A {

    public static void Method<T>(T a, Func<float[,], T> creator) {
        //...do something...
    }

}</code>

Atas ialah kandungan terperinci Bolehkah Kaedah Generik C# Mengekang Parameter Jenis kepada Pembina Tertentu?. 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