Metody i pola statyczne
Definiuj elementy składowe należące do samego typu.
Metody i pola statyczne to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.
Statyczne a instancji
Składowy element instancji należy do każdego obiektu, natomiast składowy element statyczny należy do samej klasy. Istnieje dokładnie jedna kopia składowego elementu statycznego, współdzielona przez wszystkie obiekty.
using System;
class Counter
{
public static int Total; // shared
public int Id; // per instance
}
class Program
{
static void Main()
{
Counter.Total = 5;
Console.WriteLine("Shared Total: " + Counter.Total);
}
}Deklarowanie pól statycznych
Dostęp do pola static uzyskuje się za pośrednictwem nazwy klasy, a nie instancji: ClassName.Field.
using System;
class Bank
{
public static decimal InterestRate = 0.05m;
}
class Program
{
static void Main()
{
Console.WriteLine("Rate: " + Bank.InterestRate);
}
}Metody statyczne
Metoda static działa bez instancji. Wywołuje się ją na klasie. Nie może korzystać z pól instancji, ponieważ nie ma dostępu do this.
using System;
class MathUtil
{
public static int Square(int x)
{
return x * x;
}
}
class Program
{
static void Main()
{
Console.WriteLine(MathUtil.Square(7));
}
}Współdzielony stan między instancjami
Ponieważ pole statyczne ma jedną kopię, każda instancja widzi tę samą wartość. Jest to przydatne w przypadku liczników i współdzielonej konfiguracji.
using System;
class Robot
{
public static int Count;
public Robot()
{
Count++;
}
}
class Program
{
static void Main()
{
new Robot();
new Robot();
new Robot();
Console.WriteLine("Robots created: " + Robot.Count);
}
}Metody statyczne nie mogą używać danych instancji
Metoda statyczna nie ma dostępu do this, więc może korzystać wyłącznie z parametrów, zmiennych lokalnych i innych składowych statycznych.
using System;
class Calculator
{
public static int Add(int a, int b) => a + b;
public static int Multiply(int a, int b) => a * b;
}
class Program
{
static void Main()
{
Console.WriteLine(Calculator.Add(2, 3));
Console.WriteLine(Calculator.Multiply(4, 5));
}
}Łączenie elementów statycznych i instancji
Klasa może zawierać oba rodzaje składowych. Metody instancji mogą odczytywać składowe statyczne, ale metody statyczne nie mogą odczytywać składowych instancji.
using System;
class Account
{
public static decimal Fee = 2m;
public decimal Balance;
public decimal NetBalance()
{
return Balance - Fee; // instance method can read static
}
}
class Program
{
static void Main()
{
var a = new Account { Balance = 100m };
Console.WriteLine("Net: " + a.NetBalance());
}
}Wzorzec liczników statycznych
Przypisywanie każdemu nowemu obiektowi identyfikatora z użyciem statycznego licznika to klasyczne zastosowanie pól statycznych.
using System;
class Ticket
{
private static int _next = 1;
public int Number;
public Ticket()
{
Number = _next++;
}
}
class Program
{
static void Main()
{
Console.WriteLine(new Ticket().Number);
Console.WriteLine(new Ticket().Number);
Console.WriteLine(new Ticket().Number);
}
}Pomocnicze metody statyczne
Metody statyczne świetnie sprawdzają się w bezstanowych operacjach zależnych wyłącznie od danych wejściowych, takich jak formatowanie i konwersja.
using System;
class Format
{
public static string Money(decimal amount)
{
return "$" + amount.ToString("0.00");
}
}
class Program
{
static void Main()
{
Console.WriteLine(Format.Money(12.5m));
}
}Wywoływanie metod statycznych z metod statycznych
Metody statyczne mogą bezpośrednio wywoływać inne metody statyczne tej samej klasy bez używania instancji.
using System;
class Geometry
{
public static double CircleArea(double r) => Math.PI * Square(r);
private static double Square(double x) => x * x;
}
class Program
{
static void Main()
{
Console.WriteLine(Geometry.CircleArea(2).ToString("0.00"));
}
}Pola statyczne zachowują wartości
Pole statyczne zachowuje swoją wartość przez cały czas działania programu, a nie tylko przez czas istnienia jednego obiektu. Należy używać go w przypadku pamięci podręcznych lub sum bieżących.
using System;
class Logger
{
public static int MessageCount;
public static void Log(string msg)
{
MessageCount++;
Console.WriteLine("[" + MessageCount + "] " + msg);
}
}
class Program
{
static void Main()
{
Logger.Log("start");
Logger.Log("working");
Logger.Log("done");
}
}Połączenie wszystkiego
Składowe statyczne odwzorowują pojęcia dotyczące całej klasy: współdzielone stawki, liczniki i bezstanowe metody pomocnicze, podczas gdy składowe instancji przechowują dane poszczególnych obiektów.
using System;
class Order
{
public static decimal TaxRate = 0.10m;
public decimal Subtotal;
public decimal Total() => Subtotal + Subtotal * TaxRate;
}
class Program
{
static void Main()
{
var o = new Order { Subtotal = 200m };
Console.WriteLine("Total: " + o.Total());
}
}Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat składowych statycznych.
Podsumowanie
Składowe statyczne należą do klasy i mają jedną współdzieloną kopię, natomiast składowe instancji należą do każdego obiektu. Metody statyczne nie mają dostępu do this i nie mogą korzystać z danych instancji, ale kod instancji może odczytywać składowe statyczne. Elementów statycznych należy używać w przypadku liczników, współdzielonej konfiguracji i bezstanowych metod pomocniczych.
using System;
class Demo
{
public static int Shared;
public int Own;
public static void Bump() => Shared++;
}
class Program
{
static void Main()
{
Demo.Bump();
Demo.Bump();
Console.WriteLine(Demo.Shared);
}
}Często zadawane pytania
Czy lekcja „Metody i pola statyczne” jest bezpłatna?
Tak — pełny tekst „Metody i pola statyczne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Metody i pola statyczne”?
Definiuj elementy składowe należące do samego typu. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C# Academy?
Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Metody i pola statyczne”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?
Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Metody i pola statyczne
- Klasy statyczne do celów pomocniczych
- Stałe i pola readonly
- Projektowanie statyczne a instancje