Aujourd’hui, je vous propose un petit tutoriel qui présente la surcharge d’opérateurs en C#.
La surcharge d’opérateurs permet de modifier le comportement des opérateurs +, -, *, /, = …
La liste de tous les opérateurs surchargeables est disponible sur le site de Microsoft : Liste des opérateurs surchargeables en C#.
Contexte
Pour cet exemple, je vous propose de mettre en place une nouvelle classe Monnaie qui permet d’effectuer des calculs sur des monnaies du même type.
Cette classe aura donc deux propriétés : Valeur et Type. La classe sera immutable comme les chaines de caractères par exemple.
{
public double Valeur { get; private set; }
public string Type { get; private set; }
public Monnaie(double valeur, string type)
{
Valeur = valeur;
Type = type;
}
public override string ToString()
{
return Valeur + " " + Type;
}
}
[/csharp]
Pour permettre le calcul sur de la monnaie, il est nécessaire de définir quelques opérateurs. Dans l’exemple, je vous propose de définir l’opérateur d’addition :
[csharp] public static Monnaie operator +(Monnaie a, Monnaie b){
CheckTypes(a, b);
return new Monnaie(a.Valeur + b.Valeur, a.Type);
}
public static void CheckTypes(Monnaie a, Monnaie b)
{
// vérifier que a et b ne soient pas null
if (a == null || b == null)
throw new ArgumentNullException();
// vérifier que les deux monnaies sont du même type
if (a.Type != b.Type)
throw new ArgumentNullException();
}
[/csharp]
Petite remarque : ces deux méthodes sont à ajouter dans la classe Monnaie.
A partir de ce moment-là, vous pourrez utiliser l’opérateur pour additionner deux monnaies. Par exemple :
[csharp] void Main(){
Monnaie a = new Monnaie(12, "EUR");
Monnaie b = new Monnaie(15, "EUR");
Monnaie c = a+b;
Console.WriteLine(c); // affiche normalement "27 EUR"
}
[/csharp]
Pour aller plus loin
La surcharge d’opérateur est très pratique si vous créez de nouveaux types « mesurables » qu’il faudra additionner, soustraire, multiplier…
Désormais, c’est à vous de jouer. Je vous invite à télécharger le code d’exemple et à ajouter une surcharge de l’opérateur – (soustraction) ou * (multiplication) pour essayer.