Klasa statyczna to taka klasa, której nie możemy utworzyć instancji.

 W tym wpisie (tutaj) mówiłem czym jest klasa, jeżeli nie wiesz czym jest, to najpierw zapoznaj się z wpisem.

Klasa może posiadać swoją instancję w postaci konkretnego obiektu, aby utworzyć obiekt musimy użyć słowa kluczowego “new” np.:

Ołówek ołówekŻółty = new Ołówek();

Ołówek to klasa, która opisuje czym jest ołówek, że posiada jakąś długość, czy jest naostrzony, jaki ma kolor.

Obiekt to konkretny ołówek np. ten, który leży na twoim biurku lub ten, który leży w sklepie.

Klasa statyczna to taka, gdzie nie można utworzyć konkretnego obiektu i jest związana z typem klasy, a nie jego konkretną instancją.

Pewnie zadajesz sobie teraz pytanie, do czego został stworzony tak dziwny twór, jak klasy statyczne.

Pokażę Ci przykład, który rozwieje to pytanie 🙂

class Ołówek
{
    public string JakimKoloremPiszeOłówek;
    public string Kolor;
    public bool OłówekJestNaostrzony;
    public int DługośćOłówkaWcm;
    public double Cena;
}

Wróćmy do przykładu ołówka w sklepie i powiedzmy, że chcemy dodać cenę 2 ołówków.

Mamy 2 obiekty.

Ołówek ołówek1 = new Ołówek();
Ołówek ołówek2 = new Ołówek();

Możemy to zrobić za pomocą

double cenaOłówków = ołówek1.Cena + ołówek2.Cena;

Chcemy jednak używać naszego dodawania cen ołówków w kilku miejscach w naszym programie. Taka sytuacja sprawia, że kod będzie się powtarzał (jedna z podstawowych zasad programowania mówi, że jeżeli kod jest napisany 2 razy to znaczy, że trzeba go uwspólnić).
W przyszłości być może chcemy dać rabat na zakup 2 ołówków. Wtedy istnieje duże prawdopodobieństwo, że gdzieś w naszym programie zapomnimy poprawić kod i jeżeli nasze dodawanie cen było np. w 5 miejscach w programie, to po dodaniu opcji z rabatem może nam umknąć jedno miejsce i wtedy nasz program zacznie mieć błędy, ponieważ nie będzie się zawsze zachowywał tak jak byśmy chcieli i nie zawsze naliczy rabat.

A więc chcemy uwspólnić naszą metodę dodawania cen ołówków. W tym celu musimy utworzyć jakąś klasę np. KalkulatorCen

class KalkulatorCen
{
    public double suma(Ołówek ołówek1, Ołówek ołówek2){
        return ołówek1.Cena + ołówek2.Cena;
    }

}

Teraz wykonajmy metodę sumującą ceny ołówków.

Ołówek ołówek1 = new Ołówek();
Ołówek ołówek2 = new Ołówek();
KalkulatorCen kalkulatorCen1 = new KalkulatorCen();

double cenaOłówków = kalkulatorCen1.suma(ołówek1, ołówek2);

Jak widać, musieliśmy utworzyć obiekt klasy KalkulatorCen, ale jest to coś co tak naprawdę nie musielibyśmy zrobić, ponieważ chcemy tylko uwspólnić pewną metodę i tworzenie obiektu kalkulatoraCen nie jest nam potrzebne. To nie jest coś co przechowuje stan, to tylko uwspólnia pewną metodę, do której wchodzą jakieś obiekty i wychodzi jakiś rezultat.

Tutaj z pomocą przychodzi słowo kluczowe static i klasy statyczne.

static class KalkulatorCen
{
    public static double suma(Ołówek ołówek1, Ołówek ołówek2){
        return ołówek1.Cena + ołówek2.Cena;
    }
}
Ołówek ołówek1 = new Ołówek();
Ołówek ołówek2 = new Ołówek();

double cenaOłówków = KalkulatorCen.suma(ołówek1, ołówek2);

Jak widać używając klasy statycznej nie potrzebujemy konkretnej instancji naszej klasy, możemy skorzystać z jej metod bez implementacji konkretnego obiektu.

Istnieje również możliwość tworzenia metod statycznych w klasach, które nie są statyczne. Doskonałym przykładem może być kolor ołówka, który zakładamy, że jest grafitowy i kropka.
Wtedy nie musimy tworząc nowego obiektu za każdym razem mówić jakim kolorem pisze nasz konkretny ołówek, ponieważ kolor jest statyczny i jest on grafitowy.

class Ołówek
{
    public static string JakimKoloremPiszeOłówek = "grafitowy";
    public string Kolor;
    public bool OłówekJestNaostrzony;
    public int DługośćOłówkaWcm;
    public double Cena;
}
string kolor = Ołówek.JakimKoloremPiszeOłówek;

Klasy statyczne najczęściej używa się do tworzenia klas rozszerzających jakąś funkcjonalność (extensions) np. żeby sumować jakieś wartości, wykonywać jakieś operacje na klasach.

Klasy statyczne to temat, który warto poznać, ponieważ używa się tego typu konstrukcji podczas pisania programów. Robi się to zdecydowanie rzadziej niż pisanie normalnych klas. Z klasami statycznymi bardzo szybko spotkasz się podczas pisania swoich programów.

Mam nadzieję, że rozumiesz teraz czym jest klasa statyczna. Daj znać czy ten wpis pomógł Ci w poznaniu i zrozumieniu tego zagadnienia 🙂