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:
Zagadnienie wyjaśnione w sposób prosty i zrozumiały, nawet dla takiego laika jak ja.
It’s awesome for me to have a website, which is useful designed for my knowledge.
thanks admin
thanks