Maison >développement back-end >C++ >Comment puis-je contraindre un type générique à avoir un constructeur spécifique en 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 :
<code class="language-csharp">public class A { public static T Method<T>(T a) where T : new() { // ... some code ... return new T(); } }</code>
Cela limite correctement T
aux types avec un constructeur par défaut. Cependant, ce qui suit entraînera une erreur de compilation :
<code class="language-csharp">public class A { public static T Method<T>(T a) where T : new(float[,] u) { // ... some code ... return new T(new float[0, 0]); } }</code>
Approche alternative
Pour contourner cette limitation, utilisez un délégué pour fournir un constructeur acceptant le type de paramètre requis :
<code class="language-csharp">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 } }</code>
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!