Przeciążanie operatorów w C#

Przeciążanie operatorów w C#

C# umożliwia zdefiniowanym przez użytkownika typom przeciążanie operatorów
poprzez de-finowanie statycznych funkcji składowych za pomocą słowa kluczowego operatora.

 

Poniższy przykład ilustruje implementację operatora dodawania (+)
Jeśli mamy strukturę złożoną, która reprezentuje liczbę zespoloną:

public struct Complex
{
        public double Real { get; set; }
        public double Imaginary { get; set; }
}

 

I chcemy dodać możliwość użycia operatora dodawania (+) dla tej klasy.
to znaczy.:

Complex a = new Complex()   { Real = 1, Imaginary = 2 };
Complex b = new Complex()   { Real = 4, Imaginary = 8 };
Complex c = a + b;

 

Będziemy musieli przeciążać operatora dodawania (+) dla struktury.
Odbywa się to za pomocą funkcji statycznej i słowa kluczowego operatora:

public static Complex operator + (Complex c1, Complex c2)
{
      return new Complex
      {
                 Real = c1.Real + c2.Real,
                 Imaginary = c1.Imaginary + c2.Imaginary
       };
}

 

Operatory takie jak  +, -, *, / mogą być przeciążone. Obejmuje to również Operatory, które nie zwracają tego samego typu
(na przykład, == i != mogą być przeciążone, pomimo zwracania wartości logicznych(true,false))
W tym miejscu egzekwowana jest również reguła odnosząca się do par.
Operatory porównania muszą być przeciążone parami (np. Jeśli < jest przeciążone, > również musi zostać przeciążone).
Pełna lista przeciążonych operatorów (jak również operatorów nieprzeciążonych i ograniczeń nałożonych na niektóre operatory przeciążone) można zobaczyć na stronie MSDN – Przeciążone operatory (przewodnik programowania C #).


Metoda nadpisująca operator musi być publiczna.
Operator musi być statyczny. Skoro muszą być statyczne operatory nie mogą być wirtualne, abstrakcyjne czy zamknięte.
Każdy operator ma określoną liczbę argumentów dla znaku dodawania (+)  muszą to być dwa argumenty.

Cały kod przykładu: