Surmonter les contraintes d'opérateur surchargées dans les génériques .NET
Dans .NET, les méthodes génériques nécessitent souvent des contraintes spécifiques sur les types sur lesquels elles opèrent. Pourtant, appliquer des contraintes sur les types qui ont des opérateurs surchargés peut s'avérer difficile, car les interfaces ne peuvent pas prendre en charge la surcharge d'opérateurs.
Cette question examine les options disponibles pour implémenter des méthodes génériques qui acceptent les types avec des opérateurs surchargés, en particulier la soustraction.
Répondre à la contrainte
Malheureusement, il n'existe pas de solution directe à cette contrainte. Les opérateurs sont des entités statiques et ne peuvent pas être exprimés sous forme de contraintes. De plus, les primitives existantes ne disposent pas d'implémentations d'interface spécifiques qui pourraient émuler ce comportement.
Approches dans .NET 3.5 et versions ultérieures
Cependant, des solutions de contournement sont disponibles dans .NET 3.5 et versions ultérieures :
T result = Operator.Add(first, second); // implicit <T>; here
static T Add<T>(T x, T y) { dynamic dx = x, dy = y; return dx + dy; }
Alternative : solution basée sur une interface
Une autre approche consiste à créer une interface avec des méthodes représentant les opérateurs souhaités :
interface ICalc<T> { T Add(T, T)() T Subtract(T, T)() }
Bien que cette méthode élimine l'utilisation de contraintes génériques, elle introduit la nécessité de transmettre une requête ICalc
En fin de compte, le choix de l'approche dépend des exigences spécifiques et des contraintes de compatibilité du projet.
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!