Maison > développement back-end > C++ > Les méthodes génériques C# peuvent-elles contraindre les paramètres de type à des constructeurs spécifiques ?

Les méthodes génériques C# peuvent-elles contraindre les paramètres de type à des constructeurs spécifiques ?

Patricia Arquette
Libérer: 2025-01-14 16:01:44
original
843 Les gens l'ont consulté

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

Contraintes de constructeur avec spécification de paramètres en C#

En C#, les méthodes génériques permettent d'imposer des contraintes sur les paramètres de type. Par exemple, le code suivant montre une contrainte qui nécessite que le type de paramètre T ait un constructeur sans paramètre :

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

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

}</code>
Copier après la connexion

Cela soulève la question : peut-on affiner les contraintes et spécifier que T doit avoir un constructeur qui accepte un argument float[,] ? Malheureusement, la tentative suivante ne parvient pas à compiler :

<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>
Copier après la connexion

Solution

Comme cette contrainte ne peut pas être utilisée, nous pouvons adopter une solution de contournement et utiliser un délégué pour initialiser un objet de type T :

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

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

}</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal