0Pricing
C# Academy · Lekcja

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

  1. Metody i pola statyczne
  2. Klasy statyczne do celów pomocniczych
  3. Stałe i pola readonly
  4. Projektowanie statyczne a instancje
← Powrót do C# Academy