Operatory
przeciążalne i nieprzeciążalne
W języku C# istnieją operatory, które mogą być przeciążane (overloaded) oraz operatory, które nie mogą być przeciążane. Operatory przeciążalne to takie, które mogą być przypisane do konkretnej klasy lub struktury, aby działały inaczej niż ich standardowe znaczenie. Natomiast operatory nieprzeciążalne to te, które mają swoje znaczenie dla wszystkich typów danych i nie można ich przeciążyć.
W tym przykładzie, operator + jest operatorem nieprzeciążalnym i działa standardowo jako operator dodawania dla typów liczbowych.
7
operatory przeciążalne | operatory nie przeciążalne |
---|---|
+, -, !, ~, ++, -- |
&&, || |
==, !=, <, >, <=, >= |
+=, -=, *=, /=, %= |
+, -, *, /, % |
=, ., ?:, ->, new, is, sizeof, typeof |
class Vektor2D
{
public double X { get; set; }
public double Y { get; set; }
// Konstruktor klasy Vektor2D
public Vektor2D(double x, double y)
{
X = x;
Y = y;
}
// Przeciążenie operatora dodawania
public static Vektor2D operator +(Vektor2D a, Vektor2D b)
{
// Tworzenie nowego obiektu Vektor2D zsumowanych współrzędnych
return new Vektor2D(a.X + b.X, a.Y + b.Y);
}
// Przeciążenie operatora dzielenia przez skalar
public static Vektor2D operator /(Vektor2D a, double b)
{
if (b == 0)
throw new DivideByZeroException();
// Tworzenie nowego obiektu Vektor2D z podzielonymi współrzędnymi przez skalar
return new Vektor2D(a.X / b, a.Y / b);
}
}
Wyjaśnienie
W tym przykładzie, klasa Vektor2D posiada przeciążone operatory +, -, * i /, które pozwalają na operowanie na obiektach tej klasy jak na wektorach w przestrzeni.