перегрузка бинарных операторов c#

268
22 августа 2017, 10:49

можно ли перегрузить бинарный оператор таким образом что бы передать в него больше двух параметров? Т.е как то так

public static Point operator +(Vector Vx1, Vector Vy1, Vector Vx2, Vector Vy2,Point X, Point Y)
{
 return new Point (X+Vx1+Vx2,Y+Vy1+Vy2,0);
}

- это как пример того что я хочу сделать. или кто может подсказать другой способ?

Answer 1

Автор, я не знаю, зачем тебе это нужно, но да, ты можешь сделать такое при помощи ValueTuple.

Ниже представлен код, который используется для поддержки описанного тобой решения, он не претендует на красоту и архитектурную грамотность.

Конструктор и деконструктор вектора:

public static implicit operator (int x, int y) (Vector v)
{
    return (v.X, v.Y);
}
public static implicit operator Vector((int x, int y) v)
{
    return new Vector(v.x, v.y);
}

Конструктор и деконструктор поинта:

public static implicit operator (int x, int y, int z) (Point v)
{
    return (v.X, v.Y, v.Z);
}
public static implicit operator Point((int x, int y, int z) v)
{
    return new Point(v.x, v.y, v.z);
}

Оператор сложения поинта с кортежем:

public static Point operator +(Point point1, (Point point2, Vector Vx1, Vector Vy1, Vector Vx2, Vector Vy2) t)
{
    return new Point(
        (point1.X + t.Vx1.X + t.Vx2.X),
        (t.point2.Y + t.Vy1.Y + t.Vy2.Y),
        0);
}

Применение:

Point point = new Point(1, 2, 3);
point += ((4, 5, 6), (7, 8), (9, 10), (11, 12), (13, 14));

Смею заметить, что данное поведение АБСОЛЮТНО не очевидное, поэтому я настоятельно не рекомендую его использовать.

Как минимум, избавься от поинта Y, тогда подобное сложение будет хоть как-то понятно. Если ты это и имел в виду, то код будет более вменяемый:

public static Point operator +(Point point1, (Vector Vx1, Vector Vy1, Vector Vx2, Vector Vy2) t)
{
    return new Point(
        (point1.X + t.Vx1.X + t.Vx2.X),
        (point1.Y + t.Vy1.Y + t.Vy2.Y),
        0);
}
READ ALSO
Ручная обработка столкновений unity3d

Ручная обработка столкновений unity3d

В unity есть стандартная физика - на основе компонентов rigidbody и collider'овПри автоматическом расчете скорость объектов меняется

228
Как настроить параметры Unity объекта через xml SharedPreference в Android?

Как настроить параметры Unity объекта через xml SharedPreference в Android?

Добрый деньПомогите понять как реализовать такую вещь, в общем есть задача, при запуске андроид приложения у меня сначала должна запускаться...

237
Курсор на консоли

Курсор на консоли

Здравствуйте, как сделать обработку нажатия на определенный текст в консоли C#

262
Парсинг JSON строки

Парсинг JSON строки

Есть json и я его обрабатываю

352