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

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

Mary-Kate Olsen
Libérer: 2025-01-11 12:57:42
original
286 Les gens l'ont consulté

How Can I Overload Arithmetic Operators in Constrained Generic Classes in C#?

Surcharge d'opérateurs arithmétiques dans les classes génériques restreintes C#

En C#, définir des opérateurs arithmétiques pour des classes génériques avec des contraintes peut poser des défis. Considérez la définition de classe générique suivante :

<code class="language-csharp">public class ConstrainedNumber<T></code>
Copier après la connexion

Parmi eux, des contraintes comme IComparable et IEquatable sont imposées aux types numériques primitifs comme int et float.

Puisque T lui-même n'a pas d'opérateurs arithmétiques inhérents, l'utilisation de la syntaxe public static T operator (ConstrainedNumber<T> x, ConstrainedNumber<T> y) pour définir des opérateurs arithmétiques pour cette classe échouera.

Solution utilisant IConvertible

Une solution consiste à utiliser IConvertible comme contrainte. Cette interface prend en charge la conversion de type automatique, permettant des opérations sur différents types primitifs. Cependant, il est important de noter que certains types, tels que String et DateTime, ne prennent pas en charge les opérateurs arithmétiques et nécessitent une vérification manuelle ou des restrictions lors de l'implémentation.

Ce qui suit est un exemple de surcharge d'opérateur à l'aide d'IConvertible :

<code class="language-csharp">public static T operator +(T x, T y)
where T : IConvertible
{
    var type = typeof(T);
    if (type == typeof(String) || type == typeof(DateTime))
        throw new ArgumentException(String.Format("The type {0} is not supported", type.FullName), "T");

    try
    {
        return (T)(object)(x.ToDouble(NumberFormatInfo.CurrentInfo) + y.ToDouble(NumberFormatInfo.CurrentInfo));
    }
    catch (Exception ex)
    {
        throw new ApplicationException("The operation failed.", ex);
    }
}</code>
Copier après la connexion

En utilisant IConvertible, nous pouvons effectuer des opérations arithmétiques sur une variété de types numériques primitifs tout en gérant avec élégance les types non pris en charge. Cela fournit une solution pour ajouter des opérateurs arithmétiques aux classes génériques avec des contraintes en C#.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal