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 ?
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 ?
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.
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é.
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!