Оператор Перегрузка в С#
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;
}