2012-05-19 17 views
6

¿Hay alguna manera de hacer que el operador + trabaje para el objeto Point?¿Cómo hacer que el operador + funcione mientras se suman dos puntos entre sí?

Tomemos, por ejemplo, este pequeño fragmento:

this.cm1.Show((MouseEventArgs)e.Location+this.i_rendered.Location); 

Ves, trato de añadir dos puntos a unos de otros. Simplemente no funciona (lo que se esperaba). Me encantaría que esto funcionara.

¿Alguna idea?

+0

¿De qué objeto 'Punto' está hablando? ¿Exactamente? En que espacio de nombres? ¿Es tu propio tipo? ¿Cuál esperas que sea el resultado de la adición? – Oded

+0

¿Has probado this.cm1.Show (((MouseEventArgs) e) .Location + this.i_rendered.Location); – Blablablaster

+0

@Oded -> System.Drawing.Point – Tgys

Respuesta

7

No va a suceder de la manera que espera. La única sobrecarga que la estructura Point proporciona para el operador + (adición) es one that translates the coordinates of the Point by a Size.

No hay manera de agregar dos estructuras Point juntas, y ni siquiera estoy seguro de lo que eso significa.

No pierda demasiado tiempo averiguándolo, ya sea, teniendo en cuenta que you cannot write extension methods that overload operators.

Afortunadamente, en un lenguaje compilado, no hay ninguna penalización por dividir el código en varias líneas. Para que pueda volver a escribir el código de la siguiente manera:

Point newLocation = new Point(e.Location.X + this.i_rendered.Location.X, 
           e.Location.Y + this.i_rendered.Location.Y); 
this.cm1.Show(newLocation); 

Como alternativa, puede utilizar el Offset method, pero no estoy convencido de que mejora la legibilidad.

+0

Awww triste que no es realmente posible. Supongo que iré por ese camino entonces, al menos es el mejor legible. - Gracias :). – Tgys

+0

Compruebe mi respuesta. ¿Quizás solo necesites lanzar el segundo sumando a 'Size'? –

6

He leído la documentación para System.Drawing.Point (vinculada en la respuesta de Cody Gray), y tiene un método de instancia Offset. Ese método muta el actual Point (los diseñadores eligieron hacer de Point una estructura mutable!).

Así que aquí está un ejemplo:

var p1 = new Point(10, 20); 
var p2 = new Point(6, 7); 
p1.Offset(p2); // will change p1 into the sum! 

En el mismo documento también veo una conversión explícita Point-Size. Por lo tanto, intente esto:

var p1 = new Point(10, 20); 
var p2 = new Point(6, 7); 
Point pTotal = p1 + (Size)p2; // your solution? 
+1

El segundo fragmento se acerca un poco, sí, sin embargo, se ve terriblemente confuso. Creo que la respuesta de Cody Gray es la más fácil y la más clara para aplicar en este caso. – Tgys

Cuestiones relacionadas