C# opérateur de surcharge pour `+=`?

Je suis en train de faire la surcharge de l'opérateur pour +=, mais je ne peux pas. Je ne peux que faire un opérateur de surcharge pour +.

Comment venir?

Modifier

La raison pour laquelle cela ne fonctionne pas, c'est que j'ai un Vecteur de classe (avec X et Y du champ). Considérons l'exemple suivant.

vector1 += vector2;

Si mon opérateur de surcharge est fixé à:

public static Vector operator +(Vector left, Vector right)
{
    return new Vector(right.x + left.x, right.y + left.y);
}

Alors le résultat ne sera pas ajouté à vector1, mais au lieu de cela, vector1 va devenir une marque nouveau Vecteur par une référence.

  • Ressemble à une longue discussion a déjà eu à ce sujet: maurits.wordpress.com/2006/11/27/...
  • Pouvez-vous expliquer pourquoi vous essayez de faire cela? Vous obtenez une surcharge "+=" opérateur de gratuitement quand vous surchargez "+". Est-il une situation dans laquelle vous voulez "+=" à être surchargé, mais ne veulent pas "+" pour être surchargé?
  • À venir à partir de C++, il se sent juste mal, mais en C# c'est en fait tout à fait logique.
  • double possible de Pourquoi ne puis-je pas la surcharge de l'opérateur += en C#? Mais je ne peux toujours l'utiliser?
  • J'ai ajouté une explication de pourquoi j'ai besoin de cette.
  • re mise à jour: Vecteurs devrait se comporter comme immuable des objets mathématiques. Lorsque vous ajoutez 2 à 3, vous n'avez pas la mutation de l'objet 3 dans l'objet 5. Vous créez un nouvel objet, 5. Le point de surcharge outre, les opérateurs est de faire vos propres objets mathématiques; en faire mutable fonctionne à l'encontre de cet objectif. Je voudrais rendre votre type de vecteur est immuable type de valeur.
  • Si SomeEvent est un événement, SomeEvent += SomeDelegate a une signification très différente de SomeEvent = SomeEvent + SomeDelegate. De plus, même si Vector étaient externe immuable type, ayant vec1 += vec2; traduire comme Vector.AddTo(ref Vector dest, Vector src); pourrait offrir la même sémantique dest = dest + src; mais sans structure redondante-les opérations de copie.