Menu
Coddy logo textTech

Pola i metody statyczne

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 12 z 70.

Do tej pory każde pole i każda metoda, które utworzyliśmy, należą do poszczególnych obiektów. Czasami jednak potrzebujesz danych lub zachowania należących do samej klasy, wspólnych dla wszystkich jej instancji. Właśnie wtedy przydaje się słowo kluczowe static.

Pole statyczne jest współdzielone przez wszystkie obiekty danej klasy. Istnieje tylko jedna kopia, niezależnie od tego, ile instancji utworzysz:

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

Za każdym razem, gdy tworzony jest nowy Player, wartość TotalPlayers wzrasta. Wszyscy gracze korzystają z tego samego licznika.

Metoda statyczna należy do klasy i można ją wywołać bez tworzenia obiektu:

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// Wywoływana na klasie, a nie na instancji
int result = Calculator.Add(5, 3);

Zwróć uwagę, że dostęp do składowych statycznych uzyskuje się za pomocą nazwy klasy, a nie odwołania do obiektu. Metody statyczne nie mogą uzyskiwać dostępu do pól instancji ani używać this, ponieważ nie należą do żadnego konkretnego obiektu.

Już korzystałeś z elementów statycznych, nawet o tym nie wiedząc. Console.WriteLine() to metoda statyczna, a Math.PI to pole statyczne.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system śledzenia zamówień, który używa składowych statycznych do śledzenia wszystkich zamówień złożonych w aplikacji.

Utworzysz dwa pliki, aby uporządkować kod:

  • Order.cs: Zdefiniuj klasę Order w przestrzeni nazw OrderSystem. Każde zamówienie powinno mieć właściwość instancji OrderId (int) oraz CustomerName (string). Klasa powinna również śledzić łączną liczbę utworzonych zamówień za pomocą pola statycznego TotalOrders i udostępniać metodę statyczną GetNextOrderId(), która zwraca następny dostępny identyfikator zamówienia (zaczynając od 1). Konstruktor powinien przyjmować nazwę klienta, automatycznie przypisywać identyfikator zamówienia za pomocą metody statycznej i zwiększać łączną liczbę zamówień.
  • Program.cs: W głównym pliku utwórz zamówienia na podstawie danych wejściowych i wyświetl ich szczegóły wraz z łączną liczbą zamówień.

Otrzymasz dwa dane wejściowe reprezentujące nazwy klientów dla dwóch osobnych zamówień.

Dla każdego zamówienia wyświetl jego szczegóły w następującym formacie:

Order #{OrderId} - Customer: {CustomerName}

Po utworzeniu obu zamówień wyświetl łączną liczbę:

Total Orders: {TotalOrders}

Na przykład, jeśli danymi wejściowymi są Alice i Bob, wynik powinien wyglądać następująco:

Order #1 - Customer: Alice
Order #2 - Customer: Bob
Total Orders: 2

Spróbuj swoich sił

using System;
using OrderSystem;

class Program
{
    public static void Main(string[] args)
    {
        // Wczytaj imiona klientów
        string customer1 = Console.ReadLine();
        string customer2 = Console.ReadLine();

        // TODO: Utwórz dwa obiekty Order z imionami klientów

        // TODO: Wypisz szczegóły każdego zamówienia w formacie:
        // Order #{OrderId} - Customer: {CustomerName}

        // TODO: Wypisz łączną liczbę zamówień w formacie:
        // Total Orders: {TotalOrders}
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C# online