Lorsque vous fournissez un opérateur pour votre classe, les types de paramètres pour l'implémentation de l'opérateur contrôlent les situations que vous gérez.
À titre d'illustration:
// Declare which operator to overload (+), the types
// that can be added (two Complex objects), and the
// return type (Complex):
public static Complex operator +(Complex c1, Complex c2)
{
return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}
Cette méthode définit ce qu'il faut faire si vous voulez ajouter deux numéros Complex
.
Si vous avez essayé d'utiliser ceci avec (par exemple) un double
et un Complex
, la compilation échouerait.
Dans votre cas, vous devez déclarer que les deux versions:
public static MyClass operator *(MyClass c1, MyClass c2)
{
return ...
}
public static MyClass operator *(double n, MyClass c)
{
return ...
}
Notez également que 7 * MyClass n'est pas la même chose que MyClass * 7. Vous aurez besoin de deux surcharges d'opérateurs pour faciliter cela. – rein
Il n'y a pas moyen d'écrire une deuxième surcharge d'opérateur? – gruber
Si vous voulez soutenir (double) * (MyClass) alors voici comment vous le faites. Vous semblez que cela ne résout pas votre problème - qu'est-ce qui ne va pas pour vous? – Bevan