Maison >développement back-end >C++ >Comment puis-je surcharger les opérateurs arithmétiques pour les classes génériques contraintes en C# ?

Comment puis-je surcharger les opérateurs arithmétiques pour les classes génériques contraintes en C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-11 12:41:43658parcourir

How Can I Overload Arithmetic Operators for Constrained Generic Classes in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn