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:

1 comment

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *