Maison > développement back-end > C++ > Comment puis-je contraindre un type générique à avoir un constructeur spécifique en C# ?

Comment puis-je contraindre un type générique à avoir un constructeur spécifique en C# ?

Susan Sarandon
Libérer: 2025-01-14 16:07:44
original
416 Les gens l'ont consulté

How Can I Constrain a Generic Type to Have a Specific Constructor in C#?

Types génériques C# : contraintes de paramètres de constructeur

C# permet de limiter les méthodes génériques à des types possédant des constructeurs sans paramètre (where T : new()). Cependant, la spécification directe d'un constructeur avec des types de paramètres particuliers comme contrainte n'est pas prise en charge.

Exemple de contrainte valide :

public class A
{
    public static T Method<T>(T a) where T : new()
    {
        // ... some code ...
        return new T();
    }
}
Copier après la connexion

Cela limite correctement T aux types avec un constructeur par défaut. Cependant, ce qui suit entraînera une erreur de compilation :

public class A
{
    public static T Method<T>(T a) where T : new(float[,] u)
    {
        // ... some code ...
        return new T(new float[0, 0]);
    }
}
Copier après la connexion

Approche alternative

Pour contourner cette limitation, utilisez un délégué pour fournir un constructeur acceptant le type de paramètre requis :

public class A
{
    public static void Method<T>(T a, Func<float[,], T> creator)
    {
        // ... some code ...
        T instance = creator(new float[0, 0]); // Create T using the supplied delegate
    }
}
Copier après la connexion

Ici, le délégué creator reçoit un float[,] et renvoie une instance T. La fonction Method utilise ensuite ce délégué pour la création d'objets. Cela offre une flexibilité dans la spécification des paramètres du constructeur sans recourir à des mécanismes de contrainte directe.

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal