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(); } }
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]); } }
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 } }
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!