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.
Wyzwanie
ŁatwyZbudujmy 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ęOrderw przestrzeni nazwOrderSystem. Każde zamówienie powinno mieć właściwość instancjiOrderId(int) orazCustomerName(string). Klasa powinna również śledzić łączną liczbę utworzonych zamówień za pomocą pola statycznegoTotalOrdersi 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: 2Spró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}
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metodPoćwicz samodzielnie: Kompilator C# online