Maison >développement back-end >C++ >Les constructeurs génériques C# peuvent-ils appliquer des types de paramètres spécifiques au-delà des constructeurs sans paramètre ?

Les constructeurs génériques C# peuvent-ils appliquer des types de paramètres spécifiques au-delà des constructeurs sans paramètre ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-14 15:52:43621parcourir

Le constructeur générique C# peut-il forcer la spécification du type de paramètre ? Au-delà des limites des constructeurs sans paramètres

En C#, des contraintes peuvent être imposées sur les méthodes génériques pour garantir que des exigences spécifiques sont respectées. Une contrainte courante consiste à spécifier qu'un type générique doit avoir un constructeur sans paramètre. Cependant, une question naturelle se pose : peut-on imposer des contraintes plus spécifiques au constructeur ?

Cas : Type de paramètre forcé

Prenons l'exemple fourni dans la question, où nous voulons forcer un constructeur qui accepte un paramètre float[,]. Première tentative :

<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>

La compilation a échoué, nous obligeant à chercher des alternatives.

Solution : Créer un délégué personnalisé

Pour contourner cette limitation, nous avons adopté une solution de contournement en introduisant un délégué responsable de la création des instances de type T. Ce délégué prend les paramètres nécessaires comme paramètres et renvoie une instance de T.

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

Modifiez notre code pour utiliser ce délégué, avec les résultats suivants :

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

Cette solution nous permet d'imposer des contraintes plus complexes au constructeur en passant un délégué adapté.

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

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:
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