Maison >développement back-end >C++ >Comment puis-je surcharger les opérateurs arithmétiques pour les classes génériques contraintes en C# ?
Surcharge d'opérateur arithmétique de classe générique C#
En C#, la surcharge des opérateurs arithmétiques sur une classe générique nécessite un moyen de garantir que le type générique prend en charge les opérations arithmétiques. Le code fourni démontre l'impossibilité d'appliquer l'opérateur à un type générique T sans contraintes spécifiques.
Pour résoudre ce problème, on peut utiliser l'interface IConvertible
comme contrainte sur la classe générique. Cette interface définit un ensemble de méthodes de conversion entre différents types de données, y compris les types numériques. Voici un exemple de la façon d'implémenter la surcharge d'opérateurs arithmétiques à l'aide de la contrainte IConvertible
:
<code class="language-csharp">public static operator T +(T x, T y) where T : IConvertible { Type type = typeof(T); if (type == typeof(string) || type == typeof(DateTime)) throw new ArgumentException($"类型 {type.FullName} 不受支持", "T"); try { return (T)(object)(x.ToDouble(NumberFormatInfo.CurrentInfo) + y.ToDouble(NumberFormatInfo.CurrentInfo)); } catch (Exception ex) { throw new ApplicationException("操作失败。", ex); } }</code>
Cette implémentation vérifie les types non pris en charge (tels que les chaînes et les dates) et convertit les opérandes en valeurs doubles avant d'effectuer l'opération d'addition. Cela permet d'effectuer des opérations arithmétiques sur des types numériques génériques.
En utilisant la contrainte IConvertible
, nous pouvons définir des opérateurs arithmétiques pour les classes génériques qui acceptent les types numériques primitifs prenant en charge les opérations arithmétiques. Cela fournit une solution flexible et évolutive pour travailler avec des données numériques dans du code générique.
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!