Operadores en Estructuras

18/02/2008 - 15:17 por Javito | Informe spam
Estoy probando la nueva característica de .Net Framework 2.0 que permite
introducir Operadores dentro de las estructuras, pero no veo claro su
sentido, hasta ahora lo que he entendido es lo siguiente:

1) que deben definirse como métodos prublicos y estáticos
2) que deben incluir un argumento del tipo de la estructura
3) que devuelven algo
4) que deben incluir una operación que parece que quiere sobrecargar

me podriaís decir para que se usan, la definición es algo como lo siguiente:
Struct MiEstructura{
public static int operator +(Miestructura MM, int x)
{
return valor;
}

un saludo
 

Leer las respuestas

#1 Jesús López
18/02/2008 - 17:08 | Informe spam
La sobrecarga de operadores se usa para poder usar los operadores con tipos
de datos definidos por el usuario.

¿Recuerdas de Matemáticas el espacio vectorial R2? Eran aquellos vectores
bidimensionales de la forma (x, y). Donde se habían definido algunas
operaciones:

La suma:

(x1, y1) + (x2, y2) = (x1 + x2, y1 + y2)

El producto escalar:

(x1, y1) * (x2, y2) = x1 * x2 + y1 * y2

El producto de un vector por un escalar:

k * (x, y ) = (k*x, k*y)

Y algunas otras más que para este ejemplo no hacen falta.


Pues bien, imagina que creamos una estructura llamada VectorBidimensional,
que tiene las propiedades X e Y. Y ahora queremos poder hacer las
operaciones que hemos definido anteriormente. Es decir queremos poder hacer
algo como esto:

VectorBidimensional v1 = new VectorBidimensional(2, 3);
VectorBidimensional v2 = new VectorBidimensional(4, 5);

VectorBidimensional v3 = v1 * 3.5;

VectorBidimensional v4 = v1 + v2;

Double p = v1 * v2;

C# no sabe cómo multiplicar un vector bidimensional por un double, ni sabe
multiplicar dos vectores bidimensionales, ni sabe sumar vectores
bidimensionales. Así que tenemos que indicarle cómo hacerlo. Pues bien, eso
lo hacemos con la sobrecarga de operadores:


public struct VectorBidimensional
{
public VectorBidimensional(double x, double y)
{
_x = x; _y = y;
}

private double _x;
private double _y;

public double X
{
get { return _x; }
set { _y = value; }
}

public double Y
{
get { return _y; }
set { _y = value; }
}

public static VectorBidimensional operator +(VectorBidimensional v1,
VectorBidimensional v2)
{
return new VectorBidimensional(v1.X + v2.X, v2.Y + v2.Y);
}

public static VectorBidimensional operator *(VectorBidimensional v1,
double k)
{
return new VectorBidimensional(v1.X * k, v1.Y * k);
}

public static double operator *(VectorBidimensional v1,
VectorBidimensional v2)
{
return v1.X * v2.X + v1.Y * v2.Y;
}
}






"Javito" escribió en el mensaje
news:%
Estoy probando la nueva característica de .Net Framework 2.0 que permite
introducir Operadores dentro de las estructuras, pero no veo claro su
sentido, hasta ahora lo que he entendido es lo siguiente:

1) que deben definirse como métodos prublicos y estáticos
2) que deben incluir un argumento del tipo de la estructura
3) que devuelven algo
4) que deben incluir una operación que parece que quiere sobrecargar

me podriaís decir para que se usan, la definición es algo como lo
siguiente:
Struct MiEstructura{
public static int operator +(Miestructura MM, int x)
{
return valor;
}

un saludo

Preguntas similares