Как сделать 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;
}
Другие вопросы по тегам