Оператор Перегрузка в С#

class Point
{
    private int m_PointX;
    private int m_PointY;

    public Point(int x, int y)
    {
        m_PointX = x;
        m_PointY = y;
    }

    public static Point operator+(Point point1, Point point2)
    {
        Point P = new Point();
        P.X = point1.X + point2.X;
        P.Y = point1.Y + point2.Y;

        return P;
    }
}

Пример:

Point P1 = new Point(10,20);
Point P2 = new Point(30,40)
P1+P2; // operator overloading
  • Нужно ли всегда объявлять функцию перегрузки оператора статичной? В чем причина этого?
  • Если я хочу перегрузить +, чтобы принять выражение типа 2 + P2, как это сделать?

Ответ 1

  • Да. Потому что вы не имеете дело с экземплярами всегда с операторами.
  • Просто измените типы на то, что вы хотите.

Вот пример для # 2

public static Point operator+(int value, Point point2)
{
 // logic here.
}

Вам нужно будет сделать другой способ с параметрами, если вы хотите P2 + 2 работать.

Подробнее см. http://msdn.microsoft.com/en-us/library/8edha89s.aspx.

Ответ 2

Чтобы ответить на ваши вопросы:

  • Да, вам нужно определить их как статические. Они не являются методами экземпляра, они могут работать и с null.
  • Вам нужно определить перегрузку оператора, где один из параметров имеет тип int

Ответ 3

Оба предыдущих ответа говорят о ваших вопросах, поэтому я не собираюсь вторгаться в них, но вот пример использования 2 + P:

   public static Point operator+(int yourInt, Point point)
    {
        Point P = new Point();
        P.X = point.X + yourInt;
        P.Y = point.Y + yourInt;

        return P;
    }