Как сделать Struct, который можно умножить, используя *
Фреймворк XNA для.net имеет действительно полезный объект под названием vector2, который представляет 2d вектор.
Например.
Vector2 bloo = new Vector2(5, 5);
bloo *= 5;
bloo *= someotherVector2;
Единственное, что информация X,Y хранится в виде чисел с плавающей точкой, и во многих случаях я хочу просто сохранить 2-мерную информацию или 2-мерные координаты в виде целых. Я хотел бы сделать свою собственную структуру для этого.. Вот что у меня есть..
internal struct Coord
{
public int X { get; private set; }
public int Y { get; private set; }
public Coord(int x,int y)
{
X = x;
Y = y;
}
}
Мой вопрос заключается в том, как мне сделать так, чтобы моя структура Coord могла быть умножена на целые или другие координаты, используя * (не вызов функции "Multiply")
3 ответа
Вы можете использовать перегрузку оператора:
public static Coord operator*(Coord left, int right)
{
return new Coord(left.X * right, left.Y * right);
}
Просто поместите метод в Coord
структура. Вы можете сделать это со многими операторами, такими как +,-,/
и т.д... а также с разными параметрами.
Вам нужно перегрузить оператор умножения для вашего типа.
// overload operator *
public static Coord operator *(Coord x, Coord y)
{
// Return a `Coord` that results from multiplying x with y
}
Оператор умножения перегрузки:
public static Coord operator* (Coord multiplyThis, Coord withThis) {
Coord result = multiply(multiplyThis, withThis); //...multiply the 2 Coords
return result;
}
public static Coord operator* (Coord multiplyThis, float withThis) {
Coord result = multiply(multiplyThis, withThis); //...multiply the Coord with the float
return result;
}