Перегрузка оператора в C # - PullRequest
10 голосов
/ 11 мая 2011
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
  1. Необходимо ли всегда объявлять функцию перегрузки оператора как статическую?В чем причина этого?
  2. Если я хочу перегрузить +, чтобы принять выражение типа 2 + P2, как это сделать?

Ответы [ 3 ]

10 голосов
/ 11 мая 2011
  1. Да.Потому что вы не имеете дело с экземплярами всегда с операторами.
  2. Просто измените типы на то, что вы хотите.

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

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

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

См. http://msdn.microsoft.com/en-us/library/8edha89s.aspx для получения дополнительной информации.

4 голосов
/ 11 мая 2011

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

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

Оба предыдущих ответа говорят о ваших вопросах, поэтому я не собираюсь на них вмешиваться, но вот пример использования 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...