2010-11-17 11 views
2

Je souhaite remplacer l'opérateur * pour ma classe. Je sais comment gérer * pour MyClass * MyClass mais comment puis-je mettre en œuvre ce pour avoir la possibilité de multiplier par exemple:Opérateur de substitution C#

7 * MyClass

7 est laisse dire double et MyClass est objet de MyClass,

grâce à l'aide

Répondre

8

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 ... 
} 
+3

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

+0

Il n'y a pas moyen d'écrire une deuxième surcharge d'opérateur? – gruber

+0

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

2

La signature appropriée dans ce cas est:

public static MyClass operator *(double a, MyClass b) 

cela signifie qu'il prend double une s le côté gauche, un MyClass comme le droit, et renvoie un MyClass.