0Pricing
C# Academy · Lekcja

Właściwości implementowane automatycznie

Deklaruj właściwości za pomocą zwięzłej składni automatycznej.

Właściwości implementowane automatycznie 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.

Czym jest właściwość

Właściwość z zewnątrz wygląda jak pole, ale jest obsługiwana przez metody dostępowe (get i set). Właściwości pozwalają udostępniać dane, zachowując kontrolę nad sposobem ich odczytu i zapisu.

using System;

class Program
{
    public string Name { get; set; }

    static void Main()
    {
        var p = new Program();
        p.Name = "Coddy";
        Console.WriteLine(p.Name);
    }
}

Składnia właściwości automatycznej

Właściwość automatyczna korzysta z { get; set; }. Kompilator automatycznie generuje dla niej ukryte pole zapasowe, więc nie trzeba tworzyć go ręcznie.

using System;

class Person
{
    public string FirstName { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        var person = new Person { FirstName = "Ada", Age = 36 };
        Console.WriteLine(person.FirstName + " is " + person.Age);
    }
}

Dlaczego właściwości zamiast pól

Publiczne właściwości zapewniają stabilne API. Później można dodać walidację lub zmienić sposób przechowywania danych bez naruszania kodu wywołującego. Publiczne pola na to nie pozwalają.

using System;

class Account
{
    public decimal Balance { get; set; }
}

class Program
{
    static void Main()
    {
        var a = new Account();
        a.Balance = 100.50m;
        Console.WriteLine("Balance: " + a.Balance);
    }
}

Właściwości automatyczne tylko do odczytu

Proszę pominąć set, aby utworzyć właściwość tylko do odczytu. Można jej przypisać wartość wyłącznie w konstruktorze lub inicjatorze, dzięki czemu domyślnie pozostaje niezmienna.

using System;

class Circle
{
    public double Radius { get; }

    public Circle(double radius)
    {
        Radius = radius;
    }
}

class Program
{
    static void Main()
    {
        var c = new Circle(5.0);
        Console.WriteLine("Radius: " + c.Radius);
    }
}

Domyślne wartości właściwości

Właściwości automatycznej można nadać wartość początkową za pomocą = value;. Jest to wykonywane podczas tworzenia obiektu, przed wykonaniem treści konstruktora.

using System;

class Settings
{
    public bool DarkMode { get; set; } = true;
    public int Volume { get; set; } = 50;
}

class Program
{
    static void Main()
    {
        var s = new Settings();
        Console.WriteLine("DarkMode: " + s.DarkMode + ", Volume: " + s.Volume);
    }
}

Prywatne settery

private set pozwala klasie zmieniać wartość wewnętrznie, jednocześnie uniemożliwiając jej modyfikowanie z zewnątrz. Jest to często stosowany wzorzec hermetyzacji.

using System;

class Counter
{
    public int Count { get; private set; }

    public void Increment()
    {
        Count++;
    }
}

class Program
{
    static void Main()
    {
        var counter = new Counter();
        counter.Increment();
        counter.Increment();
        Console.WriteLine("Count: " + counter.Count);
    }
}

Settery tylko podczas inicjalizacji

Akcesor init (C# 9+) pozwala przypisać wartość wyłącznie podczas inicjalizacji obiektu. Po jego utworzeniu wartość zostaje zablokowana.

using System;

class Product
{
    public string Name { get; init; }
    public decimal Price { get; init; }
}

class Program
{
    static void Main()
    {
        var p = new Product { Name = "Book", Price = 12.99m };
        Console.WriteLine(p.Name + ": " + p.Price);
    }
}

Właściwości z różnymi poziomami dostępu

Właściwości podlegają zwykłym modyfikatorom dostępu. Można łączyć różne poziomy: publiczny getter z prywatnym setterem albo właściwość w całości wewnętrzną.

using System;

class User
{
    public string Id { get; private set; }

    public User(string id)
    {
        Id = id;
    }
}

class Program
{
    static void Main()
    {
        var u = new User("u-001");
        Console.WriteLine("User Id: " + u.Id);
    }
}

Właściwości automatyczne przypominające obliczane

Właściwości automatyczne przechowują dane, ale ich nie obliczają. Jeśli potrzebują Państwo wartości wyliczanej, należy użyć pełnej właściwości (omówionej później). Na razie proszę traktować właściwości automatyczne jako prosty sposób przechowywania danych.

using System;

class Rectangle
{
    public double Width { get; set; }
    public double Height { get; set; }
}

class Program
{
    static void Main()
    {
        var r = new Rectangle { Width = 4, Height = 3 };
        double area = r.Width * r.Height;
        Console.WriteLine("Area: " + area);
    }
}

Aktualizowanie właściwości automatycznych

Wartość właściwości automatycznej z setterem można odczytywać i przypisywać ponownie dowolną liczbę razy, tak jak zmienną.

using System;

class Player
{
    public int Score { get; set; }
}

class Program
{
    static void Main()
    {
        var player = new Player();
        player.Score = 10;
        player.Score += 5;
        player.Score *= 2;
        Console.WriteLine("Score: " + player.Score);
    }
}

Połączenie elementów

Typowa klasa modelu składa się głównie z właściwości automatycznych: niektóre mają settery, inne są dostępne tylko podczas inicjalizacji, a jeszcze inne mają prywatne settery. Dzięki temu klasa pozostaje zwięzła i czytelna.

using System;

class BankAccount
{
    public string Owner { get; init; }
    public decimal Balance { get; private set; }

    public void Deposit(decimal amount)
    {
        Balance += amount;
    }
}

class Program
{
    static void Main()
    {
        var acct = new BankAccount { Owner = "Lin" };
        acct.Deposit(250m);
        Console.WriteLine(acct.Owner + ": " + acct.Balance);
    }
}

Szybkie sprawdzenie

Proszę sprawdzić zrozumienie właściwości automatycznych.

Podsumowanie

Dowiedzieli się Państwo, że właściwości automatyczne korzystają z { get; set; } oraz generowanego przez kompilator pola zapasowego. Dostępne są między innymi warianty tylko do odczytu { get; }, private set do kontrolowanej modyfikacji oraz init dla wartości ustawianych tylko raz. Jest to domyślny sposób udostępniania danych w klasie.

using System;

class Demo
{
    public string A { get; set; } = "settable";
    public string B { get; } = "read-only";
    public string C { get; init; } = "init-only";
}

class Program
{
    static void Main()
    {
        var d = new Demo { C = "changed-at-init" };
        Console.WriteLine(d.A + ", " + d.B + ", " + d.C);
    }
}

Często zadawane pytania

Czy lekcja „Właściwości implementowane automatycznie” jest bezpłatna?

Tak — pełny tekst „Właściwości implementowane automatycznie” 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 „Właściwości implementowane automatycznie”?

Deklaruj właściwości za pomocą zwięzłej składni automatycznej. Ć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 „Właściwości implementowane automatycznie”?

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. Właściwości implementowane automatycznie
  2. Pełne właściwości z polami zapasowymi
  3. Elementy składowe z treścią wyrażeniową
  4. Indeksery
← Powrót do C# Academy