2011-05-11 18 views
10
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; 
    } 
} 

przykład:operatora przeciążeniem C#

Point P1 = new Point(10,20); 
Point P2 = new Point(30,40) 
P1+P2; // operator overloading 
  1. jest konieczne, aby zawsze stwierdzenie przeciążenia jako funkcję operatora statycznego? Jaki jest tego powód?
  2. Jeśli chcę przeładować +, aby zaakceptować wyrażenie takie jak 2 + P2, jak to zrobić?
+2

Powodem, dla którego # 1 jest taki, jaki jest, więc możesz łatwo wykonać # 2. –

Odpowiedz

10
  1. Tak. Ponieważ nie zajmujesz się instancjami zawsze z operatorami.
  2. Po prostu zmień typy na takie, jakie chcesz.

Oto przykład dla # 2

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

Trzeba będzie zrobić w inny sposób z parametrami jeśli chcesz P2 + 2 do pracy.

Aby uzyskać więcej informacji, patrz http://msdn.microsoft.com/en-us/library/8edha89s.aspx.

4

Aby odpowiedzieć na Twoje pytania:

  1. Tak, trzeba je zdefiniować jako statyczne. Nie są to metody instancji, mogą one również działać w trybie null.
  2. Musisz określić przeciążenie operatora gdzie jeden z parametrów są typu int
+0

Jeśli dodajesz punkt int + zamiast punktu + int, czy nadal będzie on działał poprawnie? – smelch

+0

w C++, jeśli przeciążenie operatora jest zdefiniowane przez funkcję składową, to musimy przekazać jeden parametr lub jeśli zdefiniowana przez funkcję przyjaciela, musimy zdefiniować dwa parametry. Czy możliwe jest zadeklarowanie metody przeciążenia operatora jako funkcji memeber? – Raghav55

+0

Nie, nie można zadeklarować go jako członka instancji, należy zadeklarować go jako statyczny. Aby obsłużyć 'int + point' oraz' point + int' musisz zadeklarować dwa przeciążenia operatora. Powodem jest, że 'int + punkt' może dać inny wynik niż' punkt + int'. Na przykład pierwszy może dodać odległość od początku do int, jako liczbę, podczas gdy drugi może zrównoważyć punkt o podaną wartość. (np. jeden tworzy nową int, a drugi nową). –

0

Oba poprzednich odpowiedziach mówić o pytania, więc nie zamierzam wtrącać się w nich, ale tutaj jest przykładem użycia 2 + P: