Co to jest klasa statyczna?
Definicja
Klasa statyczna to klasa, która nie może być zainicjowana, czyli nie można utworzyć jej obiektu za pomocą słowa kluczowego new
. Wszystkie jej członkowie (metody, właściwości, pola) muszą być statyczni.
Właściwości klas statycznych
- Brak instancji: Nie można tworzyć obiektów klasy statycznej.
- Statyczni członkowie: Wszystkie metody, pola i właściwości muszą być oznaczone jako
static
. - Konstruktor statyczny: Klasa statyczna może mieć statyczny konstruktor, który jest wywoływany automatycznie przed pierwszym użyciem klasy.
- Organizacja kodu: Służy do grupowania metod i danych, które są niezależne od obiektów.
Kiedy stosować klasy statyczne?
- Funkcje pomocnicze: Gdy potrzebujesz zestawu metod, które wykonują operacje niezależne od instancji (np. obliczenia matematyczne, konwersje).
- Stałe wartości: Do przechowywania stałych, które są wspólne dla całego programu.
- Organizacja kodu: Gdy chcesz pogrupować powiązane metody i dane w jednym miejscu.
Przykład klasy statycznej
public static class Kalkulator
{
public static int Dodaj(int a, int b)
{
return a + b;
}
public static int Odejmij(int a, int b)
{
return a - b;
}
}
Użycie:
int suma = Kalkulator.Dodaj(5, 3); // Wynik: 8
Co to jest metoda statyczna?
Definicja
Metoda statyczna to metoda, która należy do klasy, a nie do konkretnego obiektu tej klasy. Oznacza to, że można ją wywołać bez tworzenia instancji klasy.
Właściwości metod statycznych
- Wywoływanie bez obiektu: Można je wywołać używając nazwy klasy.
- Brak dostępu do
this
: Nie mają dostępu do kontekstu instancji, ponieważ nie są powiązane z konkretnym obiektem. - Dostęp tylko do statycznych członków: W metodzie statycznej można używać tylko innych statycznych pól i metod tej samej klasy.
Kiedy stosować metody statyczne?
- Operacje niezależne od stanu obiektu: Gdy metoda nie musi korzystać z danych instancji klasy.
- Funkcje pomocnicze: Do wykonywania ogólnych operacji, takich jak obliczenia czy manipulacje danymi.
- Fabryki obiektów: Metody statyczne mogą tworzyć i zwracać nowe obiekty.
Przykład metody statycznej w klasie niestatycznej
public class Osoba
{
public string Imie { get; set; }
public string Nazwisko { get; set; }
public static int LiczbaOsob { get; private set; }
public Osoba(string imie, string nazwisko)
{
Imie = imie;
Nazwisko = nazwisko;
LiczbaOsob++;
}
public static void PokazLiczbeOsob()
{
Console.WriteLine($"Liczba osób: {LiczbaOsob}");
}
}
Użycie:
Osoba o1 = new Osoba("Jan", "Kowalski");
Osoba o2 = new Osoba("Anna", "Nowak");
Osoba.PokazLiczbeOsob(); // Wyświetli: Liczba osób: 2
Praktyczne zastosowanie
Klasa statyczna Math
Język C# dostarcza wbudowaną klasę statyczną Math
, która zawiera wiele metod statycznych do wykonywania operacji matematycznych.
double wynik = Math.Pow(2, 3); // Wynik: 8
double pierwiastek = Math.Sqrt(16); // Wynik: 4
Tworzenie własnej klasy statycznej
Przykład: Konwerter temperatur
public static class KonwerterTemperatur
{
public static double CelsiusNaFahrenheit(double celsius)
{
return (celsius * 9 / 5) + 32;
}
public static double FahrenheitNaCelsius(double fahrenheit)
{
return (fahrenheit - 32) * 5 / 9;
}
}
Użycie:
double tempF = KonwerterTemperatur.CelsiusNaFahrenheit(25); // Wynik: 77
double tempC = KonwerterTemperatur.FahrenheitNaCelsius(77); // Wynik: 25
Zasady i dobre praktyki
- Kiedy używać klas statycznych?
- Gdy wszystkie członkowie klasy są statyczni.
- Gdy chcesz zapobiec tworzeniu instancji klasy.
- Do grupowania metod pomocniczych.
- Unikaj nadmiernego użycia metod statycznych:
- Jeśli metoda powinna operować na danych instancji, nie powinna być statyczna.
- Nadmierne używanie metod statycznych może utrudniać testowanie i rozszerzanie kodu.
- Dostęp do statycznych pól i metod:
- Z poziomu instancji klasy można odwoływać się do statycznych członków, ale zaleca się używanie nazwy klasy dla czytelności.
Ćwiczenia:
Zadanie 1: Klasa statyczna OperacjeMatematyczne
Stwórz klasę statyczną OperacjeMatematyczne
, która zawiera następujące metody statyczne:
int Silnia(int n)
– oblicza silnię liczby naturalnejn
.bool CzyPierwsza(int n)
– sprawdza, czy liczban
jest liczbą pierwszą.
Wskazówki:
- Silnia:
n! = n * (n - 1) * ... * 1
- Liczba pierwsza: Liczba większa od 1, która dzieli się tylko przez 1 i samą siebie.
int wynikSilnia = OperacjeMatematyczne.Silnia(5); // Wynik: 120
bool czyPierwsza = OperacjeMatematyczne.CzyPierwsza(7); // Wynik: true
Zadanie 2: Metoda statyczna w klasie niestatycznej
W klasie Samochod
dodaj statyczne pole LiczbaSamochodow
, które będzie zliczać, ile obiektów klasy Samochod
zostało utworzonych. Dodaj również statyczną metodę PokazLiczbeSamochodow()
.
Przykład użycia:
Samochod s1 = new Samochod("Toyota", "Corolla");
Samochod s2 = new Samochod("Ford", "Focus");
Samochod.PokazLiczbeSamochodow(); // Wyświetli: Liczba samochodów: 2