1. Wprowadzenie do C#
  2. Szybki start
  3. Pierwszy program
  4. Komentarze
  5. Typy danych
  6. Zmienne
  7. Pola
  8. Właściwości
  9. Stałe
  10. Metody
  11. Instrukcje warunkowe
  12. Pętle
  13. Tablice
  14. Kolekcje
  15. Klasy
  16. Dziedziczenie
  17. Polimorfizm
  18. Konwersja typów
  19. Właściwości klasy String
  20. Typy wyliczeniowe
  21. Interfejsy
  22. Klasy statyczne
  23. Klasy Abstrakcyjne
  24. Przestrzenie nazw
  25. Wyjątki
  26. Typy generyczne
  27. JSON
  28. XML
  29. Podsumowanie

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.

								
int a = 5; // Inicjalizacja zmiennej 'a' wartością 5

int b = 2; // Inicjalizacja zmiennej 'b' wartością 2

int c = a + b; // Dodawanie wartości 'a' i 'b' i przypisanie wyniku do zmiennej 'c'

Console.WriteLine(c); // Wyświetlenie wartości zmiennej 'c'
								
						
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.